使用Moment Timezone在指定时区中格式化日期

时间:2016-03-29 20:12:25

标签: javascript date timezone momentjs dst

如果您将时区更改为(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)?

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

1 个答案:

答案 0 :(得分:3)

您在2009年使用moment-timezone-with-data-2010-2020.min.js。您应该将时刻时区更改为moment-timezone-with-data.min.js。请参阅工作代码段:

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>