【发布时间】:2019-07-09 00:12:28
【问题描述】:
在处理存储为时间戳(自纪元以来的毫秒数)的日期时遇到问题,其中我有一个事件的时间戳和时区,但 JavaScript/MomentJS 显示的时间似乎是不正确的偏移量。
为简洁起见,这里是我拥有的对象类型:
{
"name" : "Something happening",
"timezone" : "America/Los_Angeles",
"start" : 1586631607338
}
上述活动在加利福尼亚州洛杉矶举行,日期为('start')。浏览器在东部夏令时间将事件保存到数据库中。因此,在创建此事件的浏览器中,时间是正确的。
当浏览器的时区更改(从 EDT 到 PDT)时,上述事件的时间现在提前 3 小时。
这不准确,事件需要显示事件开始的正确时间,在本例中应该是3:00 PM,但现在显示为12:00 PM
基本上,如果用户在洛杉矶,他们将看到此事件的开始时间为12:00 PM,但作者将开始时间定义为3:00 PM
使用 MomentJS,将每个事件的日期转换为 UTC 时间戳并写入数据库
在创作方面,我们的代码基本上可以:
// event.startTime is an instance of a JS Date object
var startTime = moment(event.startTime.getTime()).utc().valueOf();
// startTime is now a UTC time stamp
startTime 与事件的时区一起写入数据库。
我们在前端/显示器上做:
var startTime = moment.tz(event.startTime, event.timezone);
// startTime is now a MomentJS object, which we then use format()
在作者方面,他们为下午 3:00 创建了一个事件,它在他们的事件详细信息屏幕中显示为从下午 3:00 开始。
但 LA 的用户会看到此事件从下午 12:00 开始
无论用户身在何处,目标都是将此事件显示为从下午 3:00 开始,因为事件的日期应为:
3:00 PM - 5:00 PM PDT,但读取为:12:00 PM - 2:00 PM PDT
我的理解是存储带有时区的 UTC 时间戳意味着可以避免这个确切的问题,但是某处出了点问题。任何指导将不胜感激。
【问题讨论】:
标签: javascript timezone momentjs