日期和时区

时间:2018-04-23 09:37:54

标签: javascript ruby

我正在尝试分享JavaScript和Ruby之间的日期/时间。由于时区,我得到了错误的结果。我尝试了许多组合而没有成功。我尝试了以下内容。我们假设我在JavaScript中有一个约会:

planning_schedule.getState().min_date
Mon Apr 23 2018 00:00:00 GMT+0200 (CEST)

我需要与wait分享。所以我试过了:

planning_schedule.getState().min_date.toISOString()
"2018-04-22T22:00:00.000Z"

planning_schedule.getState().min_date.toUTCString();
"Sun, 22 Apr 2018 22:00:00 GMT"

在Rails中,我这样做:

start_date = DateTime.strptime(params[:current_date1], '%Y-%m-%dT%H:%M:%S.%L%z')
start_week = start_date.at_beginning_of_week
end_week = start_date.at_end_of_week

我得到了结果:

start_date #=> Sun, 22 Apr 2018 22:00:00 +0000 (should be monday 23)
start_week #=> Mon, 16 Apr 2018 00:00:00 +0000 (so everything is shifted)
end_week #=> Sun, 22 Apr 2018 23:59:59 +0000

1 个答案:

答案 0 :(得分:1)

toISOString是一个好的开始,因为它为您提供了ISO 8601兼容的字符串表示。

Ruby可以通过Time.iso8601解析这样的字符串:

Time.iso8601('2018-04-22T22:00:00.000Z')
#=> 2018-04-22 22:00:00 UTC

可以通过localtime转换为系统的时区:

Time.iso8601('2018-04-22T22:00:00.000Z').localtime
#=> 2018-04-23 00:00:00 +0200

Rails拥有更复杂的时区支持:

Time.iso8601('2018-04-22T22:00:00.000Z').in_time_zone
#=> Mon, 23 Apr 2018 00:00:00 CEST +02:00

Time.zone.iso8601('2018-04-22T22:00:00.000Z')
#=> Mon, 23 Apr 2018 00:00:00 CEST +02:00