计算两个日期之间的差异(天数)?

leo*_*ora 1023 c# date

我看到这个问题已经解决了Java,JavaScriptPHP,但不是C#.那么,如何计算C#中两个日期之间的天数呢?

Gre*_*ech 1890

假设StartDateEndDate类型DateTime:

(EndDate - StartDate).TotalDays
Run Code Online (Sandbox Code Playgroud)

  • 这个答案显然是正确的,但你也可以使用`(a - b).Days`如果你对`int`感兴趣,而不是'double`,并带有部分日差的十进制表示. (514认同)
  • @JasRajBishnoi - 你可能想检查你的数学.什么是31 - 1? (56认同)
  • 从某种意义上讲,JasRaj也是正确的,它包含两个日期,它在一天之内的回报就会减少.这一切都取决于观点. (31认同)
  • 这将减少1天,08/31/2013-08/01/2013 = 31但这仅返回30. (23认同)
  • @FahadAbidJanjua这不是问题或观点,而是时间问题,我的意思是时间的一部分.08/31/2013 - 08/01/2013真正意味着08/31/2013 00:00:00 - 08/01/2013 00:00:00这解释了为什么它是30天,因为2013年8月31日是刚开始.这也解释了为什么在查询DateTime属性/字段时,获取范围的正确条件是"DateTimeProperty**> =**FromDate && DateTimeProperty**<**ToDate.AddDays(1)" (23认同)
  • "包容两个日期"不是视角问题,除非你真的相信今天和明天之间的差异是两天...... (7认同)
  • @FahadAbidJanjua我来这里寻找找到日期之间差异的方法.补充一点:当谈到整日的日期时,整天都会考虑到8月1日.因此,它将从8月31日开始减去,并且只剩下30天.否则,这是不正确的. (3认同)
  • 获取totaldays差异,包括enddate,(int)(this.EndDate.GetValueOrDefault().AddDays(1).Date - this.StartDate.GetValueOrDefault().Date).TotalDays.在我的情况下,日期变量是可空的. (3认同)

Vit*_*sky 136

使用TimeSpan对象,它是日期减法的结果:

DateTime d1;
DateTime d2;
return (d1 - d2).TotalDays;
Run Code Online (Sandbox Code Playgroud)

  • 令人惊讶的是,1分钟后回答的差异可能会对您的选票产生影响. (5认同)
  • Upvoted只是因为它清楚地表明(d1-d2)将返回一个TimeSpan对象. (2认同)

Dar*_*ren 125

最好的答案是正确的,但是如果您只想将整个日子作为一个int并且乐于放弃该日期的时间部分,那么请考虑:

(EndDate.Date - StartDate.Date).Days
Run Code Online (Sandbox Code Playgroud)

假设StartDate和EndDate的类型为DateTime.

  • 最佳答案因为_"天数"_通常意味着整天.值得注意的是,[`Days`](https://msdn.microsoft.com/en-us/library/system.datetime.day(v = vs.110).aspx)并没有停在365(和其他人一样)像'Hours`,`Minutes`,`Second`这样的属性,其中nax值是下一个更高属性开始的地方).它与`TotalDays`相同但没有一天的分数并且返回`int`而不是`double`. (6认同)
  • 赞成这一点,因为通常您需要“两个日期之间的日历天数”,而不仅仅是“24 小时间隔的数量”。例如,您需要在时间轴中显示“X 天前”标签。在这种情况下,“Monday 11:59 pm”和“Tuesday 7:00 am”之间的区别应该是“1天(前)”......所以`.Date`部分非常有用。希望我说清楚 (4认同)

pyr*_*lus 46

我想这会做你想要的:

DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now.AddDays(-1);

TimeSpan t = d1 - d2;
double NrOfDays = t.TotalDays;
Run Code Online (Sandbox Code Playgroud)


Phi*_*ace 34

DateTime xmas = new DateTime(2009, 12, 25);
double daysUntilChristmas = xmas.Subtract(DateTime.Today).TotalDays;
Run Code Online (Sandbox Code Playgroud)

  • DateTime xmas = new DateTime(DateTime.Today.Year,12,25); 会使它逐年工作,而不仅仅是2009年:) (4认同)

kin*_*ppy 18

如果有人想全日NUMER为双(a,b类型DateTime):

 (a.Date - b.Date).TotalDays
Run Code Online (Sandbox Code Playgroud)

  • 这将始终是一个整数(即,n.00000),因为日期部分始终是午夜. (3认同)

Vij*_*iya 16

// Difference in days, hours, and minutes.

TimeSpan ts = EndDate - StartDate;

// Difference in days.

int differenceInDays = ts.Days; // This is in int
double differenceInDays= ts.TotalDays; // This is in double

// Difference in Hours.
int differenceInHours = ts.Hours; // This is in int
double differenceInHours= ts.TotalHours; // This is in double

// Difference in Minutes.
int differenceInMinutes = ts.Minutes; // This is in int
double differenceInMinutes= ts.TotalMinutes; // This is in double
Run Code Online (Sandbox Code Playgroud)

您还可以获得秒,毫秒和刻度的差异.


Roh*_*dam 8

你可以试试这个

EndDate.Date.Subtract(DateTime.Now.Date).Days
Run Code Online (Sandbox Code Playgroud)

  • 实际上,这对我有最大的帮助,因为我的日期差是半天,但是当美国比澳大利亚晚1天时,我需要看看实际上有一天的差。在该线程中提到的其他答案是显示零或低于1的一些双数,我不需要。 (2认同)

Ama*_*Ama 5

在计算两个日期之间的天数时,经常会出现关于时间(小时)的争论。对问题的回答和他们的评论也不例外。

如果性能不是问题,我强烈建议通过中间转换记录您的计算。例如,(EndDate - StartDate).Days是不直观的,因为舍入将取决于的小时部分上StartDateEndDate

  • 如果您希望以天为单位的持续时间包括几天的分数,那么正如已经建议的那样使用(EndDate - StartDate).TotalDays.
  • 如果您希望持续时间反映两天之间的距离,请使用 (EndDate.Date - StartDate.Date).Days
  • 如果您希望持续时间反映开始日期早上和结束日期晚上之间的持续时间(您通常在项目管理软件中看到的),请使用 (EndDate.Date - StartDate.Date).Days + 1