Как проверить, является ли строка действительной датой - PullRequest
102 голосов
/ 02 июня 2010

У меня есть строка: "31-02-2010" и я хочу проверить, является ли это действительной датой. Каков наилучший способ сделать это?

Мне нужен метод, который возвращает true, если строка является допустимой датой, и false, если это не так.

Ответы [ 14 ]

0 голосов
/ 10 апреля 2018

Date.parse не вызывается исключение для этих примеров:

Date.parse("12!12*2012")
=> Thu, 12 Apr 2018

Date.parse("12!12&2012")
=> Thu, 12 Apr 2018

Я предпочитаю это решение:

Date.parse("12!12*2012".gsub(/[^\d,\.,\-]/, ''))
=> ArgumentError: invalid date

Date.parse("12-12-2012".gsub(/[^\d,\.,\-]/, ''))
=> Wed, 12 Dec 2012

Date.parse("12.12.2012".gsub(/[^\d,\.,\-]/, ''))
=> Wed, 12 Dec 2012
0 голосов
/ 19 февраля 2018

Вы можете попробовать следующее, что является простым способом:

"31-02-2010".try(:to_date)

Но вам нужно обработать исключение.

0 голосов
/ 28 ноября 2017

Метод:

require 'date'
def is_date_valid?(d)
  Date.valid_date? *"#{Date.strptime(d,"%m/%d/%Y")}".split('-').map(&:to_i) rescue nil
end

Использование:

config[:dates].split(",").all? { |x| is_date_valid?(x)}

Возвращает true или false, если config [: date] = "12/10 / 2012,05 / 09/1520"

0 голосов
/ 18 августа 2017
require 'date'
#new_date and old_date should be String
# Note we need a ()
def time_between(new_date, old_date)
  new_date = (Date.parse new_date rescue nil)
  old_date = (Date.parse old_date rescue nil)
  return nil if new_date.nil? || old_date.nil?
  (new_date - old_date).to_i
end

puts time_between(1,2).nil?
#=> true
puts time_between(Time.now.to_s,Time.now.to_s).nil?
#=> false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...