比表格提前1天保存的日期

时间:2016-08-05 08:42:52

标签: ruby-on-rails

我有一张booking_date的表单,当我填写2016年3月1日的表格时,这些是发送的参数:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "pturnover"=>{"booking_date(3i)"=>"1", "booking_date(2i)"=>"3", "booking_date(1i)"=>"2016"}, "commit"=>"Opslaan", "id"=>"5"}

但是当我在保存后查看数据库时,它将保存为2016年2月29日:

=> #<Pturnover id: 5, booking_date: "2016-02-29 23:00:00"

这怎么可能,它与时区有关吗?

2 个答案:

答案 0 :(得分:0)

您可以在保存之前转换输入的时间,也可以在显示页面中显示转换时间。转换可能如下所示:

ActiveSupport::TimeZone.new("Asia/Tokyo").local(your_inputed_time_here) 

希望有所帮助。

答案 1 :(得分:0)

默认情况下,Rails会使用utc时区将日期时间保存在数据库中。从/到字符串的日期时间转换可以考虑本地时区,可以是操作系统之一,也可以手动设置。本地和utc之间的转换可能是您看到的差异的原因。

由于Rails中的时区处理是一个相当大的主题,因此建议在某种程度上接近它。以下是一些相关资源:

RailsCasts #106 Time Zones (revised)

The Exhaustive Guide to Rails Time Zones

Working with time zones in Ruby on Rails

It's About Time (Zones)