我已经阅读了几篇文章,关于时刻和时区处理的文章和关于时刻和时区处理的若干问题(这里有关于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)应用程序中。
干杯, 富
答案 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`;
希望它有所帮助。