2010-10-28 136 views

回答

56

我都用这个,因为我讨厌去日期文档查找strftime语法,不在那里找到它,不得不记住它在时间文档。

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

看起来像时间类也有#wday方法,FWIW。 – rogerdpack 2012-02-27 17:04:48

+9

将steenslag蒸馏为直接回答海报的一行:使用Date :: ABBR_DAYNAMES [Date.today.wday]'。 (您必须在使用它之前包括日期库:'需要日期'。)选项:显示全天名称而不是前三个字母,使用'DAYNAMES'而不是'ABBR_DAYNAMES'。 – 2012-08-20 00:35:36

+1

有没有办法从0..6中得到一个数字而无需自己转换它? – Xitcod13 2014-03-31 22:17:33

58

看看Date class reference。一旦你有一个日期对象,你可以简单地做一整天的dateObj.strftime('%A'),或简单的做一天的dateObj.strftime('%a')。您也可以使用dateObj.wday作为一周中某天的整数值,并按照您认为合适的方式使用它。

+2

你会如何本地化此,说如果你使用Rails ? – Mohamad 2012-11-08 16:30:18

2

在您的时间对象中,使用属性.wday获取与星期几对应的数字,例如,如果.wday返回0,那么你的日期是周日,周一1等

24

嗯,我从来没有在红宝石编码,但快速谷歌给出了

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

也有'时间#cwday'获取日期1-7范围。此外,这些方法现在也在Date类中(至少是Ruby 2.3)。 – Smar 2016-07-12 11:59:17

+1

'时间'没有'cwday',但'Date'有。 – Smar 2017-05-10 11:14:07

4

正如@mway所说,您可以在任何Date对象上使用date.strftime(“%A”)来获取星期几。

如果你幸运的话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]}"