【发布时间】:2017-02-09 07:26:09
【问题描述】:
首先,我知道如何在 Javascript 中将本地日期转换为 UTC。这不是那个的复制品。
我一直在尝试获取一个将日期转换为 UTC(如果还没有)的函数,我无法控制输入是否为 UTC。我不能使用 Javascript 插件。
正常的解决方案是将本地日期解析为 UTC,但以这种方式解析已经是 UTC 的日期会输出错误地修改已经 UTC 日期的奇怪行为。
我在下面有一个示例函数。
function temp() {
var utc = new Date(Date.UTC(2017, 1, 10, 10, 10, 0));
var local = new Date(2017, 1, 10, 10, 10, 0);
var utc2 = new Date(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate(), utc.getUTCHours(), utc.getUTCMinutes(), utc.getUTCSeconds());
var local2 = new Date(local.getUTCFullYear(), local.getUTCMonth(), local.getUTCDate(), local.getUTCHours(), local.getUTCMinutes(), local.getUTCSeconds());
var utc3 = new Date(utc.getTime() + utc.getTimezoneOffset()*60*1000);
var local3 = new Date(local.getTime() + local.getTimezoneOffset()*60*1000);
Logger.log("Timezone offset: UTC=" + utc.getTimezoneOffset() + " Local=" + local.getTimezoneOffset());
Logger.log("UTC: " + utc.getTime() + " -> UTC2(" + utc2.getTime() + ") or UTC3(" + utc3.getTime() +")");
Logger.log("Local: " + local.getTime() + " -> UTC2(" + local2.getTime() + ") or UTC3(" + local3.getTime() +")");
}
返回
Timezone offset: UTC=420 Local=420
UTC: 1486721400000 -> UTC2(1486746600000) or UTC3(1486746600000)
Local: 1486746600000 -> UTC2(1486771800000) or UTC3(1486771800000)
请注意,即使是 UTC 日期也有时区偏移。并且将本地日期转换为 UTC 的两种方法都会将已经 UTC 日期修改为不正确的日期。
感谢您的帮助。
【问题讨论】:
-
在谈论 ECMAScript Date 对象时,“我知道如何在 Javascript 中将本地日期转换为 UTC”这句话没有任何意义。 Javascript 日期总是 UTC,它们不能“转换为 UTC”。如果您有一个要解析的字符串,那就另当别论了。但是,您的问题没有解析。
-
"…即使是 UTC 日期也有时区偏移"。日期没有时区偏移。 getTimezoneOffset 方法从主机系统获取偏移量,它与 Date 实例无关。
标签: javascript date datetime