时刻js正在拾取错误的时区/偏移量,因此从UTC到本地时间的转换不正确

时间:2017-04-25 00:01:08

标签: timezone momentjs

我已经阅读了几篇文章,关于时刻和时区处理的文章和关于时刻和时区处理的若干问题(这里有关于stackoverflow),但是我还没有找到关于矩决定当地UTC偏移是什么的答案。我在美国/丹佛时区,在撰写本文时,偏移量是UTC-07:00。 Windows时钟设置正确并正确显示本地时间。对于" 2017-04-24 17:33:55"的UTC时间戳,我希望以下代码将displayDate记录为" 04/24 10:12:34"

dateString = "2017-04-24 17:12:34"
console.log("dateString: " + dateString)
utc = moment.utc(dateString)
console.log("utc: " + utc.format())
now = moment(utc.format())
console.log("now: " + now.format())
displayDate = now.format("MM/DD HH:mm:ss")
console.log("displayDate: " + displayDate)

但是,这就是控制台显示的内容:

dateString: 2017-04-24 17:12:34
utc: 2017-04-24T17:12:34Z
now: 2017-04-24T18:12:34+01:00
displayDate: 04/24 18:12:34

我不知道它是如何认为我在UTC + 01:00偏移的时区。我没有使用时刻时区,并且无法解决为什么时刻错误的偏移。我注意到有一个TZ环境变量设置为America / Denver,所以这显然没有效果。瞬间如何确定局部偏移?是否有某种默认设置在某处搞砸了?它必须是我的机器上的东西,因为相同的代码在另一台机器上正常工作。

如果有帮助,此代码存在于AngularJS(版本1.5.8)应用程序中。

干杯, 富

3 个答案:

答案 0 :(得分:2)

从普通的JavaScript Date()。toString()输出,它给了我一个关于TZ环境变量的线索,因为它被设置为“America / Denver”。我取消设置TZ环境变量,然后重新启动Web服务器(Tomcat服务)并再次尝试。我遇到了同样的问题,但无论如何都决定重启整个机器。毕竟,这是Windows机器上许多问题的解决方案......果然,这很有效!

底线是JavaScript必须使用TZ环境变量(覆盖系统日期和时间设置),它似乎只是查看前三个字符。

希望这有助于其他人。

答案 1 :(得分:0)

如果您使用的是moment.js,则可以将UTC转换为本地时区。

首先,您将添加moment.js库

然后定义变量日期并指定UTC时区日期时间值,如

var date =' 2017-12-25 10:50:18';

//(UTC datetime)

var stillUtc = moment.utc(date).toDate();

//以本地时区转换

var local = moment(stillUtc).local()。format(' YYYY-MM-DD HH:mm:ss');

在本地变量中获取本地日期时间。您可以打印本地变量并检查答案

<强>的console.log(局部);

您的控制台结果是&#39; 2017-12-25 16:20:18&#39;

答案 2 :(得分:0)

我发现这有助于获得与ISO

相似的字符串
 const isoDate = `${moment(item.startDate).format()}Z`;

希望它有所帮助。