1

我有一个日历,当用户点击一天时,我通过 ajax 将 javascript 时间变量传递给我的 rails 控制器。

这在本地工作正常,但是当部署在我的服务器上时,日期似乎比我单击的日期晚了一天。

当我最初使用日历加载页面时,它显示正确的日期并且我正在使用:day = Time.now.to_date.to_s(:db)

当用户点击日历中的某一天时,它会采用这个 js 语句:

start_date: Math.floor(new Date(date).getTime()/1000)

这意味着:

1362549600

并将其 ajaxilly 传递到此 rails 控制器方法中:

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

这就是昨天和今天的区别。我不确定我应该改变什么来解决这个问题。

4

1 回答 1

2

Time.at将使用服务器系统时间,ruby 中的所有日期和时间函数也是如此。

在数据库中存储日期(读取或写入)时,config.time_zone它实际上仅用于日期转换。有关更多信息,请参见此答案

我认为,如果您irb在服务器上运行并尝试Time.at(1362549600).utc_offset / 60 / 60,您将不会获得 -6 小时的预期时区偏移,而是您似乎得到的 -2。

于 2013-03-20T00:06:58.033 回答