Как определить, совпадает ли данный день, месяц и год с установленной датой?

#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