2011-06-04 47 views
0

我在使用Rails 3中的日期輸入時使用了text_field,並希望將日期格式化爲mm/dd/yyyy更改Rails 3中日期輸入的格式?

雖然我發現顯示日期這種方式的一些解決方案,但我沒有運行一個可行的方法接受該格式作爲輸入。

問題在於,在模糊日期如"09/05/2011"的情況下,Rails將其解釋爲「5月9日」而非「9月5日」。

根據mm/dd/yyyy格式,讓Rails 3解釋這些輸入的最佳方式是什麼?

回答

3

希望你的目標受衆是純粹的美國人,因爲那個日期格式在美國以外的地方並不多。

不管怎樣,你只是想驗證字符串的格式:

validates_format_of :the_date, :with => /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/ 

這是一個驗證字符串的格式一個非常基本的模式,而不是在隔板之間的實際值。如果你想這樣做,最好的辦法就是試着用Date#strptime解析日期,看看它是否解析。

+0

感謝您的回答。不幸的是,我可能不清楚我在找什麼。我編輯了我的問題,以澄清問題是關於Rails解釋模糊日期的方式。 – 2011-06-04 17:38:51

+2

+1爲答案。問題不在於Rails如何解釋模糊的日期,而是存在模糊的日期。 Rails沒有明確地確定用戶位置的好方法,這是對日期格式的暗示。作爲開發人員,您需要通過詢問用戶他們的首選日期格式或通過指定避開問題的獨特格式來幫助您。人機界面的人會建議您避免使用文本框,並使用日曆彈出窗口或界面來完全避免此問題。 – 2011-06-04 18:32:41

1

我遇到了一個問題,用戶用月/日/年填寫文本字段。但由於新的日期解析,Rails承認他們輸入日/月/年。我通過在Rails中修補Date._parse來解決它。因此我在初始化文件夾中添加了一個date_patch.rb。

require 'time' 

class Date 
    class << self 
    alias :org_parse :_parse 

    # switch the month and day field for expecting US dates 
    def _parse(str, comp=true) 
     str = str.sub(/(\d{1,2})\/(\d{1,2})\/(\d{1,4})/, '\2/\1/\3') 
     org_parse str, comp 
    end 
    end 
end