dates = ["11/12/08 10:47", "11/12/08 13:23", "11/12/08 13:30",
"11/25/08 19:21", "2/2/09 11:29", "11/12/08 15:00"]
Run Code Online (Sandbox Code Playgroud)
这会抛出一个无效的参数错误:
dates.each do |date|
d = Date.parse(date)
d.mon
end
#=> ArgumentError: invalid date
Run Code Online (Sandbox Code Playgroud)
但是取第一个日期dates,这是输出:
d = Date.parse('11/12/08 10:47')
puts d.mon
#=> #<Date: 2011-12-08 ((2455904j,0s,0n),+0s,2299161j)>
#=> 12 but this should be 11
Run Code Online (Sandbox Code Playgroud)
Date使用mon和day交换创建了对象?tor*_*o2k 12
根据您的输入,Date.parse假设它们采用格式解析您的日期YY/MM/DD,因此当它尝试解析11/25/08时失败,因为25它不是有效的月份:
d = Date.parse('11/12/08 10:47')
d.year
# => 2011
d.month
# => 12
d.day
# => 8
Date.parse('11/25/08 19:21')
# ArgumentError: invalid date
Run Code Online (Sandbox Code Playgroud)
鉴于您的日期都采用相同的格式,您应该使用该Date.strptime方法:
d = Date.strptime('11/12/08 10:47', '%m/%d/%y')
d.year
# => 2008
d.month
# => 11
d.day
# => 12
Date.strptime('11/25/08 19:21', '%m/%d/%y')
# => #<Date: 2008-11-25 ((2454796j,0s,0n),+0s,2299161j)>
Run Code Online (Sandbox Code Playgroud)
编辑可以使用%m/%d/%y快捷方式而不是格式字符串%D:
Date.strptime('11/25/08 19:21', '%D')
# => #<Date: 2008-11-25 ((2454796j,0s,0n),+0s,2299161j)>
Run Code Online (Sandbox Code Playgroud)