2009-11-19 2 views

ответ

55

В основном (показано здесь в 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

+0

Примечание: Вы должны 'требовать«date''first – 203

+0

@ 203, спасибо, фиксированный мой ответ. – miku

+1

Прохладно, что вы показываете, что yday не очень подходит для сравнения через високосные годы после февраля :) – toxaq

2

Использование Date.new(year, month, day) создать Date объект для даты вам нужно, а затем получить день года с yday:

>> require 'date' 
=> true 
>> Date.new(2009,12,31).yday 
=> 365 
>> Date.new(2009,2,1).yday 
=> 32 
1

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 
+0

Мне нравится использование тестов в качестве примеров +1 – Toby

Смежные вопросы