2010-10-28 3 views

ответ

56

Я использовал это, потому что я ненавидел перейти к документам Date для поиска синтаксиса strftime, не обнаружив его там и не запомнив его в документах Time.

require 'date' 

class Date 
    def dayname 
    DAYNAMES[self.wday] 
    end 

    def abbr_dayname 
    ABBR_DAYNAMES[self.wday] 
    end 
end 

today = Date.today 

puts today.dayname 
puts today.abbr_dayname 
+10

выглядит так же, как и у класса Time, есть метод #wday, FWIW. – rogerdpack

+9

Дистилляция steenslag в одну строку, которая напрямую отвечает на плакат: используйте 'Date :: ABBR_DAYNAMES [Date.today.wday]'. (Вам нужно включить библиотеку Date, прежде чем вы сможете ее использовать: 'require Date'.) Параметры: для отображения полных имен дней вместо первых трех букв используйте' DAYNAMES' вместо 'ABBR_DAYNAMES'. –

+1

есть ли способ получить число от 0..6 без его преобразования? – Xitcod13

58

Посмотрите на Date class reference. Когда у вас есть объект даты, вы можете просто сделать dateObj.strftime('%A') на весь день, или dateObj.strftime('%a') за сокращенный день. Вы также можете использовать dateObj.wday для целочисленного значения дня недели и использовать его по своему усмотрению.

+2

Как бы локализовать это, скажем, если вы используете Rails ? – Mohamad

2

В вашем объекте времени используйте свойство .wday, чтобы получить число, соответствующее дню недели, например. Если .wday возвращает 0, то ваша дата воскресенье, 1 понедельник, и т.д.

24

Ну, я никогда не закодированы в рубин, но быстрый Google дает

time = Time.at(time) # Convert number of seconds into Time object. 
puts time.wday # => 0: Day of week: 0 is Sunday 
+1

Также есть 'Time # cwday' для получения дат в диапазоне 1-7. Также эти методы в настоящее время (по крайней мере, Ruby 2.3) присутствуют и в классе Date. – Smar

+1

'Time' не имеет' cwday', но 'Date' имеет. – Smar

4

Как @mway сказал, вы можете использовать date.strftime ("% A") на любом объекте Date, чтобы получить день недели.

Если вам повезет Date.parse могли бы получить от строки до дня недели на одном дыхании:

def weekday(date_string) 
    Date.parse(date_string).strftime("%A") 
end 

Это работает для теста:

weekday("October 28 of 2010") #=> "Thursday" 
4

сказать, что я date = Time.now.to_date то date.strftime("%A") напечатает имя на день недели и будет иметь только номер на день недели, напишите date.wday.

18
Date.today.strftime("%A") 
=> "Wednesday" 

Date.today.strftime("%A").downcase 
=> "wednesday" 
5

Работы из коробки с рубином, не требуя:

Time.now.strftime("%A").downcase #=> "thursday" 
5

Быстрый, грязный и локализация людей:

days = {0 => "Sunday", 
1 => "Monday", 
2 => "Tuesday", 
3 => "Wednesday", 
4 => "Thursday", 
5 => "Friday", 
6 => "Saturday"} 

puts "It's #{days[Time.now.wday]}" 
Смежные вопросы