将日期格式化为发件人当地时间

时间:2017-06-21 21:12:36

标签: javascript date momentjs

我很难将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

1 个答案:

答案 0 :(得分: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>