JavaScript - 解析 UTC 日期

问题描述 投票:0回答:5

如何解析一个简单的日期字符串并让 JavaScript 知道它实际上是 UTC 日期?目前,如果我这样做

new Date('2015-08-27')
它会将其转换为我的时区。

javascript date
5个回答
47
投票

您可以附加

'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

4
投票

在某些情况下,当其他解决方案不起作用时,添加

 GMT
将有所帮助:

new Date('July 11, 2022, 16:22:14 PM' + ' GMT')

2
投票

这对大多数人来说可能是显而易见的,但我被难住了几秒钟,因为我的字符串已经有了

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);


0
投票

这两个辅助函数将 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(),
  ))
}

-5
投票

这就是我要做的。

var current = new Date();
var utcDate = new Date(current.getTime() + current.getTimezoneOffset() * 60000);
© www.soinside.com 2019 - 2024. All rights reserved.