获取两个日期之间的天数,并在日期更改时保持相同的天数

时间:2014-07-28 15:01:46

标签: vb.net

用户想要编辑开始日期。开始日期和结束日期之间的天数必须始终相同。

例如

开始日期最初为28/07/2014,结束日期为2014年8月1日

日期相隔4天

用户将开始日期更改为2014年6月1日

结束日期现在必须是05/06/2014

难以绕过这个逻辑。

4 个答案:

答案 0 :(得分:3)

您只需使用DateTimeDate.AddDays方法,甚至更好:TimeSpan

Dim timeSpanBetween = endDate - startDate

startDate = New Date(2014, 6, 1)
endDate = startDate.Add(timeSpanBetween)

答案 1 :(得分:3)

这有两个方面:

计算两个日期之间的天数

就个人而言,我会使用我的Noda Time API,但你仍然可以使用BCL的DateTime类型 - 从另一个中减去一个DateTime来获得TimeSpan },然后使用TimeSpan.TotalDays属性。然后将结果转换为整数。 (你需要确保它们确实只是日期,以避免一天中的一小部分。)如果你愿意,你甚至可以保留TimeSpan

根据另一个日期调整一个日期

如果您知道要将两者分开多少天,则只需要适当地使用DateTime.AddDays。例如,如果startDate已更改:

endDate = startDate.AddDays(days)

如果endDate发生了变化:

startDate = endDate.AddDays(-days)

答案 2 :(得分:1)

   ' global declaration
   Dim d1, d2 As Date
   d1 = CDate("28/07/2014")
   d2 = CDate("01/08/2014")

   ' function to find the date difference
   public sub date_difference(d1 as date,d2 as date)
   MsgBox((d2 - d1).TotalDays)
   end sub

答案 3 :(得分:0)

拿两个datetimepicker dtp_start_date& dtp_end_date。 为天数nm_days

之间的间隙取一个数值上升
Public Class Form1
Dim start_date As New Date
Dim end_date As New Date

Dim main_load As Boolean
Private Sub dtp_start_date_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtp_start_date.ValueChanged
    If main_load = True Then
        Try
            start_date = dtp_start_date.Value

            end_date = start_date.AddDays(nm_days.Value)
            dtp_end_date.Value = end_date
        Catch ex As Exception

        End Try
    End If

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    main_load = True
    start_date = dtp_start_date.Value
    end_date = dtp_end_date.Value
End Sub

End Class