Каков наилучший способ получить день года для любой конкретной даты в Ruby?Как получить день года в рубине?
Например: 31/dec/2009
должен возвращать day 365
и 01/feb/2008
должен возвращать day 32
Каков наилучший способ получить день года для любой конкретной даты в Ruby?Как получить день года в рубине?
Например: 31/dec/2009
должен возвращать day 365
и 01/feb/2008
должен возвращать day 32
В основном (показано здесь в irb):
>> require 'date'
>> Date.today.to_s
=> "2009-11-19"
>> Date.today.yday()
=> 323
Для любой даты:
>> Date.new(y=2009,m=12,d=31).yday
=> 365
Или:
>> Date.new(2012,12,31).yday
=> 366
@see также: Рубин Documentation
вы могли бы сделать что-то с civil_to_jd (у, т, д, Sg = GREGORIAN)
из
Использование Date.new(year, month, day)
создать Date
объект для даты вам нужно, а затем получить день года с yday
:
>> require 'date'
=> true
>> Date.new(2009,12,31).yday
=> 365
>> Date.new(2009,2,1).yday
=> 32
Date#yday
- это то, что вы ищете.
Вот пример:
require 'date'
require 'test/unit'
class TestDateYday < Test::Unit::TestCase
def test_that_december_31st_of_2009_is_the_365th_day_of_the_year
assert_equal 365, Date.civil(2009, 12, 31).yday
end
def test_that_february_1st_of_2008_is_the_32nd_day_of_the_year
assert_equal 32, Date.civil(2008, 2, 1).yday
end
def test_that_march_1st_of_2008_is_the_61st_day_of_the_year
assert_equal 61, Date.civil(2008, 3, 1).yday
end
end
Мне нравится использование тестов в качестве примеров +1 – Toby
Примечание: Вы должны 'требовать«date''first – 203
@ 203, спасибо, фиксированный мой ответ. – miku
Прохладно, что вы показываете, что yday не очень подходит для сравнения через високосные годы после февраля :) – toxaq