Rails - 确定星期几

far*_*din 3 ruby datetime ruby-on-rails weekday dayofweek

所以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是不是周末也不是公众假期,而且是在办公室工作时间之间

Ric*_*ton 7

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

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

首先,需要date图书馆

require 'date'
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

根据您的编码偏好,您可以进一步干掉它

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

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

if date.wday == 5
  // Do something
end
Run Code Online (Sandbox Code Playgroud)

此外,如果您正在处理营业时间,那么使用business_timegem 可能最容易

你也可以加入holidays宝石business_time.

首先,安装宝石

gem install business_time
gem install holidays
Run Code Online (Sandbox Code Playgroud)

然后需要宝石

require 'business_time'
require 'holidays'
Run Code Online (Sandbox Code Playgroud)

了解今天是否是工作日

Date.today.workday?
Run Code Online (Sandbox Code Playgroud)

而且是个假期

你现在可以使用这样的东西来确定今天是否是假日

Holidays.on(date, :us).empty?
Run Code Online (Sandbox Code Playgroud)

在办公室工作时间之间

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

BusinessTime::Config.beginning_of_workday = "8:30 am"
BusinessTime::Config.end_of_workday = "5:30 pm"
Run Code Online (Sandbox Code Playgroud)

来源

红宝石

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