2014-11-04 39 views
2

我使用week_field助手在表單中生成一週選擇器。當我選擇一個星期並提交時,我的控制器獲得正確的序列化的一週(例如'2014-W03'),我可以將它變成一個日期對象。這一切都有效,但是當日期再次序列化時,它總是遞減1(例如,它將是'2014-W02')。我看了看source code for the week_field helper,並將其序列化爲week_field在序列化和反序列化後給出錯誤的一週

def format_date(value) 
    value.try(:strftime, "%Y-W%W") 
    end 

但這似乎並沒有被編碼時的日期被解析。此外,解析和序列化然後日期yeilded這個靠不住的結果:

irb > Date.parse('2014-W03').strftime('%Y-W%W') 
=> "2014-W02" 

任何想法,這裏發生了什麼或如何,我可以在某種程度上是有道理的做到這一點?如果有更乾淨的路線,我討厭在週數上多加一個+1或更改week_fieldformat_date定義。

+0

我提交了一份公關的軌道來解決這個:https://github.com/rails/rails/pull/22190 – 2015-11-05 10:34:38

回答

2

這是http://apidock.com/ruby/DateTime/strftime

%W - Week number of the year. The week starts with Monday. (00..53) 

看來你有好老 - 從0或1開始 - 問題。 STRFTIME會從0開始,

但是計數週也許%V是你的正確的事情:

ISO 8601基於本週年和週數:

本週YYYY的1星期一開始幷包括YYYY-01-04。 第一週前一年的日子是去年的最後一週 。

%G - The week-based year 
%g - The last 2 digits of the week-based year (00..99) 
%V - Week number of the week-based year (01..53) 
+0

我怕你是正確的。當時間序列化週數時,我不得不增加週數。使用rails提供/使用的兩種方法會導致這種不一致的結果,這很奇怪。謝謝! – 2014-11-06 18:43:06

+0

是的,的確很奇怪。通常你會在PHP中發現這種不一致,或者這種排序;所以我又看了一遍,修改了我的答案。 – 2014-11-06 22:12:47