我从(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天
我做错了什么?
答案 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