2015-05-27 96 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