获取两个日期之间的日历天数
Get calendar days between two dates
DateDiff
函数以 24 小时为基础报告日间隔,当一天中的时间发生变化时,当询问某事发生在多少天前时,会提供一个奇怪的结果。
例如,如果我想获得从昨天下午开始的天数,如果还没有整整 24 小时,DateDiff 将 return 0
,而大多数时候我问这个问题,我希望昨天被视为 1 天前,无论时间戳如何。
有没有办法让 DateDiff 达到 return 日历天数?
Demo in .NET Fiddle
Dim date1 As DateTime = #3/1/2017 5:00 PM#
Dim date2 As DateTime = #3/2/2017 10:00 AM#
Dim daysAgo = DateDiff(DateInterval.Day, date1, date2)
Dim msg = String.Format("Last date was {0} day(s) ago on {1}. ", daysAgo, date1.ToShortDateString())
Console.WriteLine(msg) ' Last date was 0 day(s) ago on 3/1/2017.
Whosebug 上的以下问题没有解决这个细微差别:
- Get date difference in VB.NET
- Calculating Number of Months between 2 dates
- How to find the number of days between two dates / DateTimePickers
您可以使用 DateTime.Date
删除时间部分并像这样比较整数日期:
Demo in .NET Fiddle
Dim date1 As DateTime = #3/1/2017 5:00 PM#
Dim date2 As DateTime = #3/2/2017 10:00 AM#
Dim daysAgo = DateDiff(DateInterval.Day, date1.Date, date2.Date)
Dim msg = String.Format("Last date was {0} day(s) ago on {1}. ", daysAgo, date1.ToShortDateString())
Console.WriteLine(msg) ' Last date was 1 day(s) ago on 3/1/2017.
您不需要字符串操作来获得没有时间部分的 DateTime,只需使用 DateTime.Date。
要获得两个日期之间的时间跨度,只需将一个日期减去另一个日期即可。一个日期减去另一个 returns 一个 TimeSpan object whose Days 属性 就是完整日期的差值。
您需要做的就是:
Dim days As Integer =(date2.Date-date1.Date).Days
这样可以避免生成和解析临时字符串。
DateDiff
函数以 24 小时为基础报告日间隔,当一天中的时间发生变化时,当询问某事发生在多少天前时,会提供一个奇怪的结果。
例如,如果我想获得从昨天下午开始的天数,如果还没有整整 24 小时,DateDiff 将 return 0
,而大多数时候我问这个问题,我希望昨天被视为 1 天前,无论时间戳如何。
有没有办法让 DateDiff 达到 return 日历天数?
Demo in .NET Fiddle
Dim date1 As DateTime = #3/1/2017 5:00 PM#
Dim date2 As DateTime = #3/2/2017 10:00 AM#
Dim daysAgo = DateDiff(DateInterval.Day, date1, date2)
Dim msg = String.Format("Last date was {0} day(s) ago on {1}. ", daysAgo, date1.ToShortDateString())
Console.WriteLine(msg) ' Last date was 0 day(s) ago on 3/1/2017.
Whosebug 上的以下问题没有解决这个细微差别:
- Get date difference in VB.NET
- Calculating Number of Months between 2 dates
- How to find the number of days between two dates / DateTimePickers
您可以使用 DateTime.Date
删除时间部分并像这样比较整数日期:
Demo in .NET Fiddle
Dim date1 As DateTime = #3/1/2017 5:00 PM#
Dim date2 As DateTime = #3/2/2017 10:00 AM#
Dim daysAgo = DateDiff(DateInterval.Day, date1.Date, date2.Date)
Dim msg = String.Format("Last date was {0} day(s) ago on {1}. ", daysAgo, date1.ToShortDateString())
Console.WriteLine(msg) ' Last date was 1 day(s) ago on 3/1/2017.
您不需要字符串操作来获得没有时间部分的 DateTime,只需使用 DateTime.Date。
要获得两个日期之间的时间跨度,只需将一个日期减去另一个日期即可。一个日期减去另一个 returns 一个 TimeSpan object whose Days 属性 就是完整日期的差值。
您需要做的就是:
Dim days As Integer =(date2.Date-date1.Date).Days
这样可以避免生成和解析临时字符串。