2017-06-21 36 views
0

我很难很快采用UTC日期字符串和偏移量,并准确地将时间调整为用户本地时间。我在我们的服务器上收到一个日期:2017-06-21T20:26:28.744Z,我需要把它变成发件人当地时间的时间戳。为了这个例子,可以说偏移量是6个小时。本地时间格式化发件人的日期

我知道这可能是错误的,z部分解释了什么是抵消真的是

我需要使用时刻将2017-06-21T20:26:28.744Z转换为2017-06-21T14:26:28

这样做似乎给了我字符串的UTC部分和砍掉偏移量。我需要使用偏移调节小时/分钟回

moment 
    .utc('2017-06-21T20:26:28.744Z') 
    .local() 
    .format('YYYY-MM-DDTHH:mm:ss') 
    // 2017-06-21T20:26:28" 
    // I need 2017-06-21T14:26:28 
+0

'moment.utc('2017-06-21T20:26:28.744Z')。local()。format('YYYY-MM-DDTHH:mm:ss')'? –

+0

试过了。我实际上会更新,以示例 –

+0

您的代码看起来很好,它会在我的环境中显示“2017-06-21T22:26:28”(欧洲/罗马时区UTC + 2)是正确的输出。 – VincenzoC

回答

0

您可以使用utcOffset

设置UTC通过提供分钟偏差。请注意,一旦您设置了偏移量,它就是固定的,并且不会自行更改(即没有DST规则)。如果你想要一个实际的时区 - 特定位置的时间,如America/Los_Angeles,请考虑moment-timezone

如果输入小于16并且大于-16,它会将输入解释为小时。

这里工作示例:

console.log(moment 
 
    .utc('2017-06-21T20:26:28.744Z') 
 
    .utcOffset(-6) 
 
    .format('YYYY-MM-DDTHH:mm:ss'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

如果你想使用的时刻,时区,你可以使用tz()方法:

console.log(moment 
 
    .utc('2017-06-21T20:26:28.744Z') 
 
    .tz('America/Chicago') 
 
    .format('YYYY-MM-DDTHH:mm:ss'));
<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>

+0

这更接近我想要的,但我不想硬编码偏移量或时区。服务器在AWS中运行,可能在任何地方。据我所知,时间戳的结尾是偏移量。我只需要学习如何提取这些数据,然后我就可以使用它来向后/向前移动时间 –

+0

偏移量通常是一个值,用UTC来表示差异(例如'+02:00','-06:00 ',...)。您的输入以'Z'结尾,这意味着您的值是UTC('+00:00'偏移量)。我不清楚你想使用哪种标准_“将时间向后/向前移动”_。 – VincenzoC

+0

当我这样做时,我对日期有了一个可怕的理解。我没有意识到z之前的数字是毫秒。Duh我知道,我认为这是我对utc的偏移量的一些计算。我能够完成这件事。谢谢你们的时间!对于记录你的答案没有错,我会upvote它,但我不想让它看起来像我的理解是正确的 –