#ruby-on-rails #ruby #ruby-on-rails-3 #date
#ruby-on-rails #ruby #ruby-on-rails-3 #Дата
Вопрос:
Учитывая 3 числа: ДД, ММ, ГГГГ, какой самый простой способ узнать, совпадают ли они с официальной датой?
Примеры:
14, 05, 2011 => Legal
29, 02, 2011 => Illegal
29, 02, 2012 => Legal
35, 11, 1989 => Illegal
14, 18, 2011 => Illegal
14, 00, 2011 => Illegal
00, 11, 1979 => Illegal
31, 11, 1979 => Illegal
Ответ №1:
Вы можете использовать, valid_date?
но это YYYY, MM, DD
:
irb(main):015:0> require 'date'
=> true
irb(main):021:0> Date::valid_date?(2011,05,14)
=> true
irb(main):022:0> Date::valid_date?(2011,02,29)
=> false
irb(main):023:0> Date::valid_date?(2012,02,29)
=> true
Комментарии:
1. Я не смог найти документацию для
valid_date?
. Не могли бы вы поделиться указателем?2. На самом деле, это есть
valid_civil?
во многих документах — corelib.rubyonrails.org/classes/Date.html#M001222 Ноvalid_civil?
это псевдоним дляvalid_date?
Ответ №2:
У Date есть метод valid_civil? .
require 'date'
dates = DATA.readlines.map{|line| line.split(', ').map(amp;:to_i)}
dates.each do |date|
d, m, y = date
puts Date.valid_civil?(y, m, d)
end
__END__
14, 05, 2011
29, 02, 2011
29, 02, 2012
35, 11, 1989
14, 18, 2011
14, 00, 2011
00, 11, 1979
31, 11, 1979
Комментарии:
1. Для тех, кому интересно, это «официальное», документированное название, в то время как
valid_date?
является псевдонимом этого метода.
Ответ №3:
Один из вариантов — использовать что-то вроде:
require 'time'
def valid(year,month,day)
Time.parse "#{year}#{month}#{day}" rescue return false
return true
end