답변:
종료 날짜에서 시작 날짜를 뺍니다.
endDate - beginDate
DateTime
객체 가있는 경우 Date
먼저 변환해야하며 , 그렇지 않으면 초 수를 반환합니다.
Date
객체를 빼면 다음 Rational
과 같이 정수로 타입 캐스트해야 할 수도 있습니다.(endDate - beginDate).to_i
irb(main):005:0> a = Date.parse("12/1/2010")
=> #<Date: 4911063/2,0,2299161>
irb(main):007:0> b = Date.parse("12/21/2010")
=> #<Date: 4911103/2,0,2299161>
irb(main):016:0> c = b.mjd - a.mjd
=> 20
수정 된 율리우스 일 수를 사용합니다 .
에서 위키 피 디아 :
율리우스 력 날짜 (JD)는 BC 주 그리니치 표준시 인 4713 년 1 월 1 일부터 줄리안 다산 달력으로 일과 시간의 간격을 나타냅니다.
루비 2.0에서 변경되었을 수 있습니다
내가 이것을 할 때 나는 분수를 얻는다. 예를 들어 콘솔 (irb 또는 레일 c)
2.0.0-p195 :005 > require 'date'
=> true
2.0.0-p195 :006 > a_date = Date.parse("25/12/2013")
=> #<Date: 2013-12-25 ((2456652j,0s,0n),+0s,2299161j)>
2.0.0-p195 :007 > b_date = Date.parse("10/12/2013")
=> #<Date: 2013-12-10 ((2456637j,0s,0n),+0s,2299161j)>
2.0.0-p195 :008 > a_date-b_date
=> (15/1)
물론 int로 캐스팅하면 예상 결과를 얻을 수 있습니다.
2.0.0-p195 :009 > (a_date-b_date).to_i
=> 15
이것은 DateTime 객체에서도 작동하지만이 예제와 같이 초를 고려해야합니다.
2.0.0-p195 :017 > a_date_time = DateTime.now
=> #<DateTime: 2013-12-31T12:23:03-08:00 ((2456658j,73383s,725757000n),-28800s,2299161j)>
2.0.0-p195 :018 > b_date_time = DateTime.now-20
=> #<DateTime: 2013-12-11T12:23:06-08:00 ((2456638j,73386s,69998000n),-28800s,2299161j)>
2.0.0-p195 :019 > a_date_time - b_date_time
=> (1727997655759/86400000000)
2.0.0-p195 :020 > (a_date_time - b_date_time).to_i
=> 19
2.0.0-p195 :021 > c_date_time = a_date_time-20
=> #<DateTime: 2013-12-11T12:23:03-08:00 ((2456638j,73383s,725757000n),-28800s,2299161j)>
2.0.0-p195 :022 > a_date_time - c_date_time
=> (20/1)
2.0.0-p195 :023 > (a_date_time - c_date_time).to_i
=> 20
Ruby 2.1.3에서 상황이 변경되었습니다.
> endDate = Date.new(2014, 1, 2)
=> #<Date: 2014-01-02 ((2456660j,0s,0n),+0s,2299161j)>
> beginDate = Date.new(2014, 1, 1)
=> #<Date: 2014-01-01 ((2456659j,0s,0n),+0s,2299161j)>
> days = endDate - beginDate
=> (1/1)
> days.class
=> Rational
> days.to_i
=> 1
이건 어때요?
(beginDate...endDate).count
범위는 고유 한 일련의 집합입니다. 그리고 ...
독점적 인 Range 리터럴입니다.
그래서 beginDate..(endDate - 1)
동일합니다. 그렇지 않다.
beginDate가 endDate 와 같은 경우 고유성으로 인해 첫 번째 요소 ...
가 제외되고 마지막 요소는 제외됩니다 . .count
오늘과 오늘 사이의 날짜를 원하면 0을 반환합니다.
0
. 일부 경우에는 완벽하게 작동합니다. 또한 두 날짜가 같으면 0을 반환하고 일반 정수도 반환합니다. 다른 답변은 정수로 변환해야하거나 결과가 음수이면 0으로 변환해야 할 수 있습니다.
이 모든 것이 나를 올바른 결과로 이끌었지만, 나는 상처를 입었습니다.
DateTime.now.mjd - DateTime.parse("01-01-1995").mjd
YYYY-MM-DD
형식으로 허용하므로 모든 사람들이 사용해야합니다.
일 = (endDate-beginDate) / (60 * 60 * 24)