我正在尝试分享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
答案 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