我有一个日历,当用户点击某一天时,我会通过 ajax 将一个 javascript 时间变量传递到我的 Rails Controller 。
这在本地工作正常,但是当部署在我的服务器上时,日期似乎比我点击的日期晚了一天。
当我最初加载带有日历的页面时,它显示了正确的日期并且我正在使用:day = Time.now.to_date.to_s(:db)
当用户点击日历中的某一天时,会采用这个js语句:
start_date: Math.floor(new Date(date).getTime()/1000)
转化为:
1362549600
并将其 ajaxilly 传递到此 Rails Controller 方法中:
start_date = Time.at(params[:start_date].to_i).to_date.to_s(:db)
logger.info "start_date = #{start_date}"
logger.info "time = #{Time.at(params[:start_date].to_i).to_datetime.to_s(:db)}"
记录器输出为:
start_date = 2013-03-05
time = 2013-03-05 22:00:00
我在 config/application.rb 中设置了我的时区:
config.time_zone = 'Central Time (US & Canada)'
关于如何解决这个问题有什么建议吗?我是否使用了错误的方式将日期从 js 传递到 rails?
编辑
顺便说一下,在我的 javascript 片段中,date
最初是 Wed Feb 06 2013 00:00:00 GMT-0600 (CST)
我刚刚检查的另一件事是我的服务器时间是 PDT,而我实际坐在中央时间。
$ date
Tue Mar 19 16:51:52 PDT 2013
我还看到,在本地运行我的应用程序时,我的记录器输出是:
start_date = 2013-03-06
time = 2013-03-06 00:00:00
这是昨天和今天的区别。我不确定我应该改变什么来解决这个问题。
最佳答案
Time.at
将使用服务器系统时间,ruby 中的所有日期和时间函数也是如此。
config.time_zone
实际上仅用于在数据库中存储日期(读取或写入)时进行日期转换。参见 this answer有关更多信息。
我认为如果您在服务器上运行 irb
并尝试 Time.at(1362549600).utc_offset/60/60
您将不会获得预期的时区偏移 - 6 小时,而不是你似乎得到的 -2。
关于javascript - 部署在我的服务器上时,Rails 时间总是晚一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15512547/