1

我从 开始(date2 - date1).round,现在这应该可以了。

问题 :

2013 年 1 月 6 日至 2013 年 2 月 5 日 =>30

2013 年 2 月 6 日至 2013 年 3 月 5 日 =>27

2013 年 3 月 6 日至 2013 年 4 月 5 日 =>30

2013 年 4 月 6 日至 2013 年 4 月 27 日 =>21

(Date.strptime('05 Feb,2013', '%d %b, %Y') - Date.strptime('06 Jan,2013', '%d %b,%Y')).round
(Date.strptime('05 Mar,2013', '%d %b, %Y') - Date.strptime('06 Feb,2013', '%d %b,%Y')).round
(Date.strptime('05 Apr,2013', '%d %b, %Y') - Date.strptime('06 Mar,2013', '%d %b,%Y')).round
(Date.strptime('27 Apr,2013', '%d %b, %Y') - Date.strptime('06 Apr,2013', '%d %b,%Y')).round

所以,

    Total = 108 days [ 30 + 27 + 30 + 21 ]

但是当我尝试在 1 中计算它时:

(Date.strptime('27 Apr,2013', '%d %b, %Y') - Date.strptime('06 Jan,2013', '%d %b,%Y')).round

这给出了:

Days = 111 days

现在,108 天!= 111 天

我究竟做错了什么 ?

4

2 回答 2

3

您在第一个代码的间隔之间缺少一天。

我增加了前 3 个日期的结束日期,因此它与下一个日期的开始日期相匹配。

p (Date.strptime('06 Feb,2013', '%d %b, %Y') - Date.strptime('06 Jan,2013', '%d %b,%Y')).round
p (Date.strptime('06 Mar,2013', '%d %b, %Y') - Date.strptime('06 Feb,2013', '%d %b,%Y')).round
p (Date.strptime('06 Apr,2013', '%d %b, %Y') - Date.strptime('06 Mar,2013', '%d %b,%Y')).round
p (Date.strptime('27 Apr,2013', '%d %b, %Y') - Date.strptime('06 Apr,2013', '%d %b,%Y')).round

输出:

31
28
31
21

总和 = 111

于 2013-05-10T12:49:11.967 回答
0

谢谢,@Dogbert。你是对的我错过了它1

虽然,正如我所建议的那样,我1 day在所有计算中都遗漏了..即

Neither of 108 or 111 are correct - Instead both are wrong

因为,它计算difference between开放范围(d1, d2) instead of [d1, d2)

因此,我应该添加到所有这些:

1 + (Date.strptime('05 Feb,2013', '%d %b, %Y') - Date.strptime('06 Jan,2013', '%d %b,%Y')).round
1 + (Date.strptime('05 Mar,2013', '%d %b, %Y') - Date.strptime('06 Feb,2013', '%d %b,%Y')).round
1 + (Date.strptime('05 Apr,2013', '%d %b, %Y') - Date.strptime('06 Mar,2013', '%d %b,%Y')).round
1 + (Date.strptime('27 Apr,2013', '%d %b, %Y') - Date.strptime('06 Apr,2013', '%d %b,%Y')).round

因此,总计 = 112 [ 这次 ]

同样,我应该add 1全面:

1 + (Date.strptime('27 Apr,2013', '%d %b, %Y') - Date.strptime('06 Jan,2013', '%d %b,%Y')).round

总和为1 + 111= 112 [单次总计]

所以,112 == 112

于 2013-05-10T13:21:52.423 回答