2016-03-11 4 views
1

So DateTime.currentFri, 11 Mar 2016 19:34:10 +0000.Rails - Определить день недели

Как определить день недели. Например, если DateTime.current - пятница (только день недели, независимо от даты)?

DateTime.current == DateTime.parse("Friday") Не работает, потому что DateTime.parse("Friday") возвращает Fri, 11 Mar 2016 00:00:00 +0000, который не то же самое.

Как проверить, соответствует ли только дата или только время определенному значению?

Заранее благодарен!

В основном я хочу, чтобы увидеть, если DateTime.current не выходные, ни государственный праздник и между офисом рабочих часов

ответ

6

В Ruby 2.1.1, класс Дата имеет friday? метод

Возвращает истинное если дата является пятницы

Во-первых, требуется 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? 

Если вы хотите решить эту проблему без булевой методы (те, которые обычно заканчиваются знак вопроса и возвращает либо true, либо false), например, когда вы сравниваете столбцы базы данных, вы можете использовать метод Date#wday. Имейте в виду, что это возвращает число в диапазоне (0..6) с 0, представляющим воскресенье. Это означает, что вы хотите пройти в 5, чтобы проверить пятницу.

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

Кроме того, если вы работаете с рабочими часами, это может быть простой, чтобы использовать business_time Gem

Вы также можете включать holidays камень с business_time.

Во-первых, установить драгоценные камни

gem install business_time 
gem install holidays 

Затем требуется камень

require 'business_time' 
require 'holidays' 

узнать, если сегодня это рабочий

Date.today.workday? 

и праздник

Теперь вы можете использовать что-то вроде этого, чтобы определить, есть ли сегодня праздник

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

и между офисом рабочих часов

Определение рабочего времени варьируется от человека к человеку. Настроить ответ невозможно. Тем не менее, с business_time камень, вы можете установить конфигурации

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

Gems

https://github.com/bokmann/business_time

https://github.com/holidays/holidays

+0

Спасибо, но мне нужно написать его с нуля, и мне нужно сравнить два объекта DateTime, так логическое значение мне действительно не поможет! – fardin

+1

Что вы имеете в виду, написав с нуля? –

+0

'date = Date.today' – steenslag

1

Проверить this-

require 'date' 
today = DateTime.current.to_date 

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

Я редактирую его. спасибо –

1

Вы можете использовать что-то вроде следующего:

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

Это возвращает день недели с полным именем, capitaliz редактор Вы также можете получить аббревиатуру так:

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

Вы также можете использовать% и или% мас, чтобы получить день недели как целое число. Пятница будет 5.

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

Вы можете проверить здесь больше возможностей:

APIdock documentation

Смежные вопросы