javascript - 部署在我的服务器上时,Rails 时间总是晚一天

标签 javascript ruby-on-rails ruby ajax date

我有一个日历,当用户点击某一天时,我会通过 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/

相关文章:

ruby-on-rails - 如何垂直显示 simple_form

ruby - 如何配置 Rspec 以在 stub 或模拟不存在的方法时引发错误?

ruby-on-rails - 添加字段以使用 Rails 4 设计注册

javascript - var myvalue = window.opener.document.getElementById (“parentId1” ) 不工作

ruby-on-rails - 良好的 RoR Gravatar gem/plugin 并检测 gravatar 帐户是否存在

javascript - 如何重新使用此代码?想学习 javascript 的新东西

ruby-on-rails - .gemrc 文件规范

ruby-on-rails - json Errno::EPERM 不允许操作

javascript - <canvas> 渐变淡入淡出 3 种颜色

javascript - JavaScript 中的 $ 符号是做什么用的