Mongoid1.month.ago将于3月1日返回01



我有一个ROR应用程序:ruby 2.3.0、rails 4.2.5.1和mongoid 5.0,在我的一个模型中,我有:field:statement_month,默认值:1.month.ago.strftime('%m'(,但仅在3月1日保存错误的结果:"01"而不是"02"。在这个月的第一天,我在其他月份都没有问题。我还添加了一些日志,before_create和after_create,打印:"-------1_month_ago_month-----------------------"+1.month.ago.strftime('%m'(=>在日志中显示"02",但在DB对象中显示"01"。这是一个mongoid问题,或者可能是时区问题?

动态默认值的正确语法使用Procs。看见https://docs.mongodb.com/mongoid/master/tutorials/mongoid-documents/#defaults.

MongoDB将时间存储为UTC时间戳,您的程序没有明确转换为UTC,因此它1(可能在时区方面行为不端,2(可能在夏令时方面行为不端。日期计算通常必须明确地以当地时间(您应该知道您所在的时区(或UTC执行。将两者混合最终会导致问题。

要排除错误月份的故障,请将系统时间设置为3月1日并调试程序。尤其是3月1日01:00和3月1号23:00。对于同一个本地日期,这些日期通常是UTC中不同的日期。

最新更新