【发布时间】:2018-11-19 19:28:50
【问题描述】:
我的服务器正在向我的 Javascript 客户端发送 UTC 时间戳。我目前处于夏令时 (GMT-7) 的山区时间,但我所做的任何时区调整仅应用 -6 偏移量。
为了确认 javascript 甚至知道我的时区,我执行了以下操作:
console.log(Date().toString()); 输出以下内容:Mon Nov 19 2018 12:13:28 GMT-0700 (Mountain Standard Time)。很明显,JS 知道我目前在 GMT-7。
现在,我的服务器正在发送2018-08-24T17:00:00。所以我用moment.js解析它,转换为本地时区,然后格式化结果。
moment.utc(this.props.value).local().format('h:mm A')
结果值为11:00 AM。 17:00:00 - 7 偏移量是 10:00,即上午 10:00。为什么javascript转换为11:00?如果我尝试spacetime 库,我会得到相同的结果:
const s = spacetime(this.props.value,'UTC')
s.goto(spacetime().timezone().name);
console.log(s.format('h:mm a')); // Also spits out 11:00 AM
如果我用偏移量手动调整矩对象,它可以正常工作:
var m = moment.utc(this.props.value);
m.add(-(new Date()).getTimezoneOffset(), 'minutes');
console.log(m.format('h:mm A')) // Outputs the correct time: 10:00 AM
当 Javascript 清楚地知道我所在的时区时,为什么 moment 和 spacetime 都没有正确调整我的时区? Chrome 和 Microsoft Edge 都会出现同样的问题。现在我将使用上面的 hacky 解决方法,但我更喜欢使用本机方法,所以我很好奇为什么这不起作用。有什么想法吗?
【问题讨论】:
标签: javascript datetime timezone momentjs