2015-05-27 48 views
0

我有一堆用户输入的日期和时间,像这样:Rails的日期时间有时不给无效日期他人

date = "01:00pm 06/03/2015" 

我试图将其提交到datetime列在数据库中,而我想他们系统化像这样:

DateTime.strptime(date, '%m/%d/%Y %H:%M') 

但我始终得到无效的日期错误。我究竟做错了什么?如果我提交没有strptime的字符串,记录将会保存,但有时会得到错误的日期。

另外,如何将时区附加到DateTime对象?

编辑:

所以.to_datetimeDateTime.parse(date)date串的工作和失败date2。这是怎么回事?

date2 = "03:30pm 05/28/2015" 

回答

2

尝试使用to_datetime

date.to_datetime 
# => Fri, 06 Mar 2015 13:00:00 +0000 

此外,如果你阅读文档DateTime#strptimehere。它指出:

Parses the given representation of date and time with the given template, and creates a date object.

其需要注意的是模板序列必须匹配于输入串序列,它别在你的情况 - 导致错误。

更新

使用to_datetime在第二个例子中会产生

ArgumentError: invalid date

这是因为预计该日期是dd-mm-yy格式。 DateTime.parse会产生同样的错误,因为to_datetime不过是后面的一个API。在非标准自定义日期格式的情况下,您应该使用strptime。在这里:

date2 = "03:30pm 05/28/2015" 
DateTime.strptime(date2, "%I:%M%p %m/%d/%Y") 
# => Thu, 28 May 2015 15:30:00 +0000 
+0

这工作了一个例子,失败的另一个?我编辑了我的问题。 –

+0

@ CD-RUM我已经更新了我的答案。请检查 – shivam

+0

优秀!非常感谢。我现在只需要弄清楚如何处理不好的用户输入,比如'0300pm 05/29/2015'或'03:00 pm05/29/2015'。任何有用的正则表达式? :) –

1
date = "01:00pm 06/03/2015"  
DateTime.parse(date) 
=> Fri, 06 Mar 2015 13:00:00 +0000 
+0

因此,该字符串的作品,但失败的这一个?'“下午03:30 05/28/2015”有什么想法? –

0

你没有得到正确的顺序您的参数。

DateTime.strptime(date, '%H:%M%p %m/%d/%Y') 

您还需要添加%p的AM/PM后缀

+0

没有帮助我。 –

+0

立即尝试。没有看到pm – kaybee99

+0

@ CD-RUM,这两种情况都可以使用。 'parse'和'to_datetime'都期望英国日期格式的值 – kaybee99