使用momentjs,在Azure上获得不同的结果

时间:2017-07-04 02:29:14

标签: javascript node.js momentjs

他测试代码:

var c = moment().tz('America/New_York');
console.log('c.format: ' + c.format());

var b = moment([c.year(), c.month(), c.date(), c.hours(), c.minutes()]).tz('America/Chicago');
console.log("b.format: " + b.format());

当我在本地运行此代码时,我得到:

c.format: 2017-07-03T16:33:42-04:00
b.format: 2017-07-03T16:33:00-05:00

这是我期望(并希望)发生的事情。基本上我只是想花一些时间来改变偏移而不改变实际时间。但是,当我通过Azure托管应用程序运行相同的代码时,输​​出为:

c.format: 2017-07-03T16:43:16-04:00
b.format: 2017-07-03T11:43:00-05:00

本地和Azure应用程序都运行相同的节点版本(8.0.0),以及时刻(2.18.1)和时刻时区(0.5.13)。

任何人都有任何想法可能导致这种情况?谢谢!

1 个答案:

答案 0 :(得分:1)

正如docs所说:

  

默认情况下,时刻会以当地时间进行分析和显示。

对于您的b变量,您使用c.year(), c.month(), c.date(), c.hours(), c.minutes()作为本地时间创建了一个时刻对象,因此将b转换为America/Chicago时区的结果将取决于系统。< / p>

您可以使用moment.tz创建指定时区的时刻对象(例如America/New_York),例如:

moment.tz([c.year(), c.month(), c.date(), c.hours(), c.minutes()], 'America/New_York')

这是一个在不同情况下显示实时结果的片段:

// Current time in New York
var c = moment().tz('America/New_York');
console.log('c.format: ' + c.format());

// Create a local moment object for the current time in New York
var mLocal = moment([c.year(), c.month(), c.date(), c.hours(), c.minutes()]);
console.log("mLocal.format: " + mLocal.format());

// Convert local moment to America/Chicago timezone
var b = mLocal.tz('America/Chicago');
console.log("b.format: " + b.format());

// Create moment object for the current time in New York
// specifying timezone and then converting to America/Chicago timezone
var b1 = moment.tz([c.year(), c.month(), c.date(), c.hours(), c.minutes()], 'America/New_York').tz('America/Chicago');
console.log("b1.format: " + b1.format());
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data-2012-2022.min.js"></script>