【问题标题】:Convert utc timestamp to local time using offset In seconds使用偏移量将 utc 时间戳转换为本地时间(以秒为单位)
【发布时间】:2017-06-19 08:19:03
【问题描述】:

我需要使用 utc 偏移量(以秒为单位)将 utc 时间戳转换为本地时间。我使用过时刻时区库。这是我的代码

var moment = require('moment-timezone');

var timestamp = Date.now();

var IST1 = moment(timestamp).utcOffset('+05:30').format('ddd MMM D Y hh:mm:ss A ')
console.log("IST1 '+05:30' --> ", IST1);

var IST2 = moment(timestamp).utcOffset('+19800').format('ddd MMM D Y hh:mm:ss A ')
console.log("IST2 '+19800' --> ", IST2);

但是我得到了这样的输出

IST1 '+05:30' -->  Mon Jun 19 2017 01:39:23 PM 
IST2 '+19800' -->  Tue Jun 20 2017 04:29:23 AM

使用“+05:30”,我得到了正确的时间。但是使用 '+19800' ,我得到了错误的时间。与此代码相关的实际问题是什么?

【问题讨论】:

  • 你为什么使用utcOffset? Moment 默认解析本地时间,如果需要将时间转换为给定时区,可以使用tz() 函数。
  • 我需要转换不同地区的时间(例如:IST,PDT..etc)
  • 既然你必须“在不同地区转换时间”我仍然认为你必须使用tz()而不是utcOffset。你可以有类似moment(timestamp).tz("Asia/Kolkata") 的IST 和moment(timestamp).tz("America/Los_Angeles") 的PDT。有关相同示例,请参见 here 和 here。
  • 我已经测试过时区。但就我而言,我的输入是以秒为单位的时间戳及其时区偏移量。就这样

标签: javascript node.js datetime momentjs timezone-offset


【解决方案1】:

从Moment docs 看来,函数utcOffset 需要分钟而不是秒。

尝试使用

var IST2 = moment(timestamp)
    .utcOffset('+330')
    .format('ddd MMM D Y hh:mm:ss A ')

它应该可以工作。

【讨论】:

  • 我成功地得到了这样的结果“2017 年 7 月 5 日星期三 11:29:56 AM”。有可能用这个获得时区吗?例如“2017 年 7 月 5 日星期三 IST 上午 11:29:56”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 2011-10-24
  • 2015-04-20
  • 2019-03-09
  • 2021-03-01
  • 2012-05-01
  • 2019-03-23
相关资源
最近更新 更多