JS - 将 "Europe/Berlin" 日期转换为 UTC 时间戳
JS - Convert a "Europe/Berlin"-Date into a UTC-Timestamp
在我的 Docker-Container 中,它具有时区 Etc/UTC
,我需要将表示 Europe/Berlin
-时区中的日期的日期字符串转换为 UTC 时间戳。
所以假设 Europe/Berlin
-日期是 2022-04-20T00:00:00
。
现在 UTC 时间戳应该等于 2022-04-19T22:00:00
。
但是当我这样做的时候
console.log(new Date("2022-04-20").getTime())
我得到 1650412800000
相当于 Europe/Berlin
-timezone 中的 2022-04-20T02:00:00
。
我该怎么做?
编辑:
我尝试了各种库,但仍然无法管理
const { DateTime } = require("luxon")
var f = DateTime.fromISO("2022-04-20").setZone('Europe/Berlin').toUTC()
console.log(f)
f
中的等价邮票是 2022-04-20T02:00:00
:/
I need to convert a Date-String which represents a Date in Europe/Berlin-timezone into a UTC timestamp.
基本上,date-only 值无法转换为时间戳,除非您任意将 time 与该日期相关联。听起来您打算使用当地时间午夜 (00:00+02:00),但您看到的却是 UTC 午夜 (00:00Z)。
这取决于您构建 Date
对象的方式。您指定 new Date("2022-04-20")
,根据 the ECMASCript spec 将被视为午夜 UTC。规范说:
... When the UTC offset representation is absent, date-only forms are interpreted as a UTC time and date-time forms are interpreted as a local time.
是的,这与 ISO 8601 不一致,并且已经被讨论得令人作呕。
要解决此问题,请将 T00:00
附加到您的输入字符串,以便您专门询问当地时间。换句话说,new Date("2022-04-20T00:00")
.
就是说,如果您需要的不是“当地时间”,而是 恰好 Europe/Berlin
,那么可以 - 您需要使用图书馆。在luxon中是这样的:
DateTime.fromISO('2022-04-20T00:00', {zone: 'Europe/Berlin'}).toUTC()
在我的 Docker-Container 中,它具有时区 Etc/UTC
,我需要将表示 Europe/Berlin
-时区中的日期的日期字符串转换为 UTC 时间戳。
所以假设 Europe/Berlin
-日期是 2022-04-20T00:00:00
。
现在 UTC 时间戳应该等于 2022-04-19T22:00:00
。
但是当我这样做的时候
console.log(new Date("2022-04-20").getTime())
我得到 1650412800000
相当于 Europe/Berlin
-timezone 中的 2022-04-20T02:00:00
。
我该怎么做?
编辑:
我尝试了各种库,但仍然无法管理
const { DateTime } = require("luxon")
var f = DateTime.fromISO("2022-04-20").setZone('Europe/Berlin').toUTC()
console.log(f)
f
中的等价邮票是 2022-04-20T02:00:00
:/
I need to convert a Date-String which represents a Date in Europe/Berlin-timezone into a UTC timestamp.
基本上,date-only 值无法转换为时间戳,除非您任意将 time 与该日期相关联。听起来您打算使用当地时间午夜 (00:00+02:00),但您看到的却是 UTC 午夜 (00:00Z)。
这取决于您构建 Date
对象的方式。您指定 new Date("2022-04-20")
,根据 the ECMASCript spec 将被视为午夜 UTC。规范说:
... When the UTC offset representation is absent, date-only forms are interpreted as a UTC time and date-time forms are interpreted as a local time.
是的,这与 ISO 8601 不一致,并且已经被讨论得令人作呕。
要解决此问题,请将 T00:00
附加到您的输入字符串,以便您专门询问当地时间。换句话说,new Date("2022-04-20T00:00")
.
就是说,如果您需要的不是“当地时间”,而是 恰好 Europe/Berlin
,那么可以 - 您需要使用图书馆。在luxon中是这样的:
DateTime.fromISO('2022-04-20T00:00', {zone: 'Europe/Berlin'}).toUTC()