【问题标题】:Formatting date in specified timezone using Moment Timezone使用 Moment Timezone 在指定时区格式化日期
【发布时间】:2016-07-17 14:16:21
【问题描述】:

如果您将时区更改为 (UTC-07:00) 山区时间并运行下面的代码,您可以看到我正在谈论的问题。

var a = moment('2009-11-01T06:00:00Z').tz('US/Mountain').format();
var b = moment('2009-11-01T06:00:00Z').tz('US/Mountain').format('YYYY-MM-DD HH:mm');
var c = moment('2009-10-31T23:00:00-07:00').format('YYYY-MM-DD HH:mm');

document.getElementById("a").innerHTML = "#1: " + a;
document.getElementById("b").innerHTML = "#2: " + b;
document.getElementById("c").innerHTML = "#3: " + c;
<script src="http://momentjs.com/downloads/moment.min.js"></script>
<script src="http://momentjs.com/downloads/moment-timezone-with-data-2010-2020.min.js"></script>
<div id="a"></div>
<div id="b"></div>
<div id="c"></div>

运行上面的代码(#1)产生的日期偏移是正确的。但是,不应该将其格式化为“2009-11-01 00:00”(#3)而不是“2009-10-31 23:00”(#2)吗?

似乎格式化程序只是去除偏移量,而不是在生成格式化日期时将其考虑在内。这是一个错误还是我在这里做错了什么?

【问题讨论】:

  • 大概山地时间是指 GMT-07:00。虽然不建议使用 Date 构造函数解析字符串,但大多数都会正确解析该字符串(但有些不会)。无论如何,您的系统似乎设置为 GMT-06:00,因此当您打印日期时,默认使用本地(主机系统)时区,比输入晚一小时。

标签: javascript date timezone momentjs dst


【解决方案1】:

您使用的是 2009 年的 moment-timezone-with-data-2010-2020.min.js。您应该将 Moment Timezone 更改为 moment-timezone-with-data.min.js。查看工作代码 sn-p:

var a = moment('2009-11-01T06:00:00Z').tz('US/Mountain').format();
var b = moment('2009-11-01T06:00:00Z').tz('US/Mountain').format('YYYY-MM-DD HH:mm');
var c = moment('2009-10-31T23:00:00-07:00').format('YYYY-MM-DD HH:mm');

document.getElementById("a").innerHTML = "#1: " + a;
document.getElementById("b").innerHTML = "#2: " + b;
document.getElementById("c").innerHTML = "#3: " + c;
<script src="http://momentjs.com/downloads/moment.min.js"></script>
<script src="http://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>
<div id="a"></div>
<div id="b"></div>
<div id="c"></div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2012-10-20
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多