Sal*_*lil 107 ruby string ruby-on-rails date
我有一个字符串:"31-02-2010"并想检查它是否是一个有效的日期.最好的方法是什么?
我需要一个方法,如果字符串是有效日期,则返回true,否则返回false.
mpd*_*mpd 109
require 'date'
begin
Date.parse("31-02-2010")
rescue ArgumentError
# handle invalid date
end
Run Code Online (Sandbox Code Playgroud)
小智 49
这是一个简单的一个班轮:
DateTime.parse date rescue nil
Run Code Online (Sandbox Code Playgroud)
我可能不建议在现实生活中的每种情况下都这样做,因为你强制调用者检查nil,例如.特别是格式化时.如果您返回默认日期|错误,它可能会更友好.
Soh*_*han 48
d, m, y = date_string.split '-'
Date.valid_date? y.to_i, m.to_i, d.to_i
Run Code Online (Sandbox Code Playgroud)
the*_*Man 28
解析日期可能会遇到一些问题,尤其是当它们处于MM/DD/YYYY或DD/MM/YYYY格式时,例如美国或欧洲使用的短日期.
Date#parse 试图找出使用哪个,但是在一年中的一个月中有很多天,格式之间的模糊可能导致解析问题.
我建议找出用户的LOCALE是什么,然后,基于此,你将知道如何使用智能解析Date.strptime.找到用户所在位置的最佳方法是在注册期间询问他们,然后在他们的首选项中提供一个设置以进行更改.假设您可以通过一些聪明的启发式挖掘出来而不打扰用户获取该信息,那么很容易失败,所以请问.
这是一个测试使用Date.parse.我在美国:
>> Date.parse('01/31/2001')
ArgumentError: invalid date
>> Date.parse('31/01/2001') #=> #<Date: 2001-01-31 (4903881/2,0,2299161)>
Run Code Online (Sandbox Code Playgroud)
第一个是美国的正确格式:mm/dd/yyyy,但是Date并不喜欢它.第二个对欧洲来说是正确的,但如果您的客户主要以美国为基础,那么您将获得大量错误解析的日期.
Ruby的Date.strptime用法如下:
>> Date.strptime('12/31/2001', '%m/%d/%Y') #=> #<Date: 2001-12-31 (4904549/2,0,2299161)>
Run Code Online (Sandbox Code Playgroud)
Sam*_*una 26
Date.valid_date? *date_string.split('-').reverse.map(&:to_i)
我想扩展Date课程.
class Date
def self.parsable?(string)
begin
parse(string)
true
rescue ArgumentError
false
end
end
end
Run Code Online (Sandbox Code Playgroud)
Date.parsable?("10-10-2010")
# => true
Date.parse("10-10-2010")
# => Sun, 10 Oct 2010
Date.parsable?("1")
# => false
Date.parse("1")
# ArgumentError: invalid date from (pry):106:in `parse'
Run Code Online (Sandbox Code Playgroud)
小智 6
验证日期的另一种方法:
date_hash = Date._parse(date.to_s)
Date.valid_date?(date_hash[:year].to_i,
date_hash[:mon].to_i,
date_hash[:mday].to_i)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79184 次 |
| 最近记录: |