Rails - 确定星期几

时间:2016-03-11 19:38:38

标签: ruby-on-rails ruby datetime dayofweek weekday

因此DateTime.current会返回Fri, 11 Mar 2016 19:34:10 +0000

如何确定星期几。例如,如果DateTime.current是星期五(只是星期几,不管日期)?

DateTime.current == DateTime.parse("Friday")因为DateTime.parse("Friday")返回的Fri, 11 Mar 2016 00:00:00 +0000不一样而无法工作。

如何检查日期或仅时间是否等于特定值?

提前致谢!

基本上我想知道DateTime.current是不是周末也不是公众假期,而且是在办公室工作时间之间

3 个答案:

答案 0 :(得分:7)

在Ruby 2.1.1中,Date类有一个friday?方法

  

如果日期是星期五,则返回true

首先,需要date

require 'date'

然后使用当前日期创建一个新的日期实例。这是一个例子

current_time = Time.now
year = current_time.year
month = current_time.month
day = current_time.day

date = Date.new(year, month, day)
date.friday?
=> true

根据您的编码偏好,您可以将其干掉更多

date = Date.new(Time.now.year, Time.now.month, Time.now.day)
=> #<Date: 2016-03-11 ((2457459j,0s,0n),+0s,2299161j)>
date.friday?

如果你想在没有布尔方法的情况下解决这个问题(通常以问号结尾并返回truefalse),例如当你进行比较时在数据库列中,您可以使用Date#wday方法。请记住,这将返回范围(0..6)中的数字,0表示星期日。这意味着你要传入5来检查星期五。

if date.wday == 5
  // Do something
end

此外,如果您正在处理工作时间,最简单的方法是使用business_time gem

您还可以将holidays gem添加到business_time

首先,安装宝石

gem install business_time
gem install holidays

然后需要宝石

require 'business_time'
require 'holidays'

了解今天是否是工作日

Date.today.workday?
  

并且是假期

您现在可以使用类似的内容来确定今天是否是假期

Holidays.on(date, :us).empty?
  

在办公室工作时间之间

办公时间的定义因人而异。没有固定的答案。但是,使用business_time gem,您可以设置配置

BusinessTime::Config.beginning_of_workday = "8:30 am"
BusinessTime::Config.end_of_workday = "5:30 pm"

<强>来源

红宝石

http://ruby-doc.org/stdlib-2.1.1/libdoc/date/rdoc/Date.html#method-i-wday

http://ruby-doc.org/stdlib-2.1.1/libdoc/date/rdoc/Date.html#method-i-friday-3F

宝石

https://github.com/bokmann/business_time

https://github.com/holidays/holidays

答案 1 :(得分:2)

您可以使用以下内容:

day = DateTime.now.strftime("%A")

这将返回星期几的全名,大写。你也可以得到这样的缩写:

day = DateTime.now.strftime("%a")

您还可以使用%u或%w将星期几作为整数。星期五将是5。

DateTime.now.strftime("%u") == 5 # True if Friday

您可以在此处查看更多功能:

APIdock documentation

答案 2 :(得分:1)

检查此 -

require 'date'
today = DateTime.current.to_date

if today.Friday?
  puts "Today is a Friday!"
end