因此输入表单来自datetime_select
"meeting"=>{"start_time[...] "start_time(4i)"=>"13", "start_time(5i)"=>"15"}
然后,控制器会花时间根据父级属性
计算end_time@initiate = DateTime.civil(date["start_time(1i)"].to_i, date["start_time(2i)"].to_i, date["start_time(3i)"].to_i, date["start_time(4i)"].to_i, date["start_time(5i)"].to_i)
params[:meeting][:end_time] = @initiate + (@product.minutes.to_i).minutes
但是,如果持续时间为60分钟(格林尼治标准时间缩短1小时会让事情变得更有趣!),数据库将填充以下内容:
["start_time", "2017-12-29 13:15:00.000000"], ["end_time", "2017-12-29 15:15:00.000000"]
解决此问题的最有效,最简洁的方式是什么?
注意这是因为数据库是用相干时区数据编写的,这排除了用户time_zone查看问题......
答案 0 :(得分:1)
似乎在DateTime
上执行加法或减法使用全局config.time_zone
设置执行隐式时区转换,而不是DateTime
中提供的偏移量(默认为未指定时为0。
要解决此问题,请在config.time_zone = 'UTC'
文件中设置config/application.rb
。
这将影响整个应用程序,使用UTC而不是系统默认时区。