Ruby:如何正确计算日期差异?

时间:2013-05-10 12:43:42

标签: ruby debugging date date-difference

我从(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天

我做错了什么?

2 个答案:

答案 0 :(得分: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

Sum = 111

答案 1 :(得分:0)

Thans,@ 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