【发布时间】:2010-10-28 15:43:56
【问题描述】:
如何在 Ruby 中计算日期的星期几?例如,2010 年 10 月 28 日是 = 星期四
【问题讨论】:
如何在 Ruby 中计算日期的星期几?例如,2010 年 10 月 28 日是 = 星期四
【问题讨论】:
Date.today.strftime("%A")
=> "Wednesday"
Date.today.strftime("%A").downcase
=> "wednesday"
【讨论】:
我之所以使用它,是因为我讨厌去 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
【讨论】:
Date::ABBR_DAYNAMES[Date.today.wday]。 (您必须先包含 Date 库才能使用它:require Date。)选项:要显示全天名称而不是前三个字母,请使用 DAYNAMES 而不是 ABBR_DAYNAMES。
看看Date class reference。一旦你有了一个日期对象,你可以简单地用dateObj.strftime('%A') 表示全天,或者用dateObj.strftime('%a') 表示缩写的一天。您也可以使用dateObj.wday 作为星期几的整数值,并根据需要使用它。
【讨论】:
#wday 应该是这个问题的最佳答案。
time = Time.at(time) # Convert number of seconds into Time object.
puts time.wday # => 0: Day of week: 0 is Sunday
【讨论】:
Time#cwday 用于获取 1-7 范围内的日期。这些方法现在(至少是 Ruby 2.3)也出现在 Date 类中。
Time 没有cwday,但Date 有。
快速、肮脏和本地化友好:
days = {0 => "Sunday",
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday"}
puts "It's #{days[Time.now.wday]}"
【讨论】:
使用 ruby 开箱即用,无需:
Time.now.strftime("%A").downcase #=> "thursday"
【讨论】:
正如@mway 所说,您可以在任何 Date 对象上使用 date.strftime("%A") 来获取星期几。
如果你很幸运,Date.parse 可能会一口气把你从 String 带到一周中的某一天:
def weekday(date_string)
Date.parse(date_string).strftime("%A")
end
这适用于您的测试用例:
weekday("October 28 of 2010") #=> "Thursday"
【讨论】:
假设我有date = Time.now.to_date
然后date.strftime("%A") 将打印星期几的名称,并将星期几的数字写成date.wday。
【讨论】:
在您的时间对象中,使用属性 .wday 获取与星期几对应的数字,例如如果 .wday 返回 0,那么您的日期是星期日、1 星期一等。
【讨论】:
与安德烈亚斯的答案基本相同
days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
today_is = days[Time.now.wday]
if today_is == 'tuesday'
## ...
end
【讨论】: