如何解析一个简单的日期字符串并让 JavaScript 知道它实际上是 UTC 日期?目前,如果我这样做
new Date('2015-08-27')
它会将其转换为我的时区。
您可以附加
'T00:00:00.000Z'
来指定时区(Z
表示 UTC)
new Date('2015-08-27' + 'T00:00:00.000Z')
请注意,
new Date('2015-08-27')
在 ES5(UTC)与 ES6(本地)中的处理方式不同,因此如果您打算对其进行硬编码(即不这样做),则不能期望任何更正都能一致地工作)
另外,请注意,您的
console.log
可能会显示与表达式计算结果的 UTC 时间相对应的本地时间(如果您希望 UTC 位于计算结果为 UTC 的表达式的末尾,这往往会让您有点困惑)时间和最后的本地时区(对于那些评估为您当地时间的人)。例如
new Date('2015-08-27T00:00:00.000Z')
可以显示
Thu Aug 27 2015 1:00:00 GMT+100
与 相同
Thu Aug 27 2015 00:00:00 UTC
在某些情况下,当其他解决方案不起作用时,添加
GMT
将有所帮助:
new Date('July 11, 2022, 16:22:14 PM' + ' GMT')
这对大多数人来说可能是显而易见的,但我被难住了几秒钟,因为我的字符串已经有了
hh:mm:ss
,所以它需要一些字符串操作。
var d = '2022-09-14 13:20:31';
d = d.split(' ').join('T')+'Z';
var date = new Date(d);
console.log(date);
这个版本更冗长,但对我来说感觉更坚固。
var d = '2022-09-14 13:20:31';
var [yyyy, mm, dd, hh, m, s] = d.split(/[^\d]+/);
var date = new Date();
date.setUTCFullYear(+yyyy);
date.setUTCMonth(mm-1);
date.setUTCDate(+dd);
date.setUTCHours(+hh);
date.setUTCMinutes(+m);
date.setUTCSeconds(+s);
console.log(date);
这两个辅助函数将 UTC 日期移至本地时区,反之亦然。代码是用 TypeScript 编写的。
对于您的问题,您可以致电:
datetimeToUTC(new Date('2015-08-27'))
。
/** If you parsed a date without time zone, you may need to shift it to local time */
export function datetimeToLocal(fromDate: Date): Date {
return new Date(
fromDate.getUTCFullYear(),
fromDate.getUTCMonth(),
fromDate.getUTCDate(),
fromDate.getUTCHours(),
fromDate.getUTCMinutes(),
fromDate.getUTCSeconds(),
fromDate.getUTCMilliseconds(),
)
}
/** If you parsed a date without time zone, you may need to shift it to UTC time */
export function datetimeToUTC(fromDate: Date): Date {
return new Date(Date.UTC(
fromDate.getFullYear(),
fromDate.getMonth(),
fromDate.getDate(),
fromDate.getHours(),
fromDate.getMinutes(),
fromDate.getSeconds(),
fromDate.getMilliseconds(),
))
}
这就是我要做的。
var current = new Date();
var utcDate = new Date(current.getTime() + current.getTimezoneOffset() * 60000);