【问题标题】:week_field gives wrong week after serialization and deserializationweek_field 在序列化和反序列化后给出错误的一周
【发布时间】:2014-12-31 15:51:10
【问题描述】:

我正在使用 week_field 帮助器在表单中生成星期选择器。当我选择一周并提交时,我的控制器会获得正确的序列化周(例如“2014-W03”),我可以将其转换为日期对象。一切正常,但是当日期再次序列化时,它总是减 1(例如它将是 '2014-W02')。我查看了source code for the week_field helper,它序列化为

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

但这似乎不是解析日期时的编码。此外,解析然后序列化日期会产生这个不稳定的结果:

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

关于这里发生的事情或我如何以有意义的方式做到这一点的任何想法?如果有更清洁的路线,我不希望在周数上有额外的 +1 或更改 week_field format_date 定义。

【问题讨论】:

标签: ruby-on-rails ruby date serialization


【解决方案1】:

这是来自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)

【讨论】:

  • 恐怕你是对的。当需要序列化周数时,我不得不增加周数。奇怪的是,使用 rails 提供/使用的两种方法会产生这样的不一致结果。谢谢!
  • 是的,确实很奇怪。通常你会在 PHP 中发现这种不一致,或者那种;所以我又看了看,修改了我的答案。
猜你喜欢
  • 2020-05-27
  • 1970-01-01
  • 2013-11-11
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多