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

最初のコードの間隔の間に 1 日がありません。

最初の 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 に答える