首页 > 解决方案 > 是否有以语言环境字符串格式获取 UTC 日期的功能?

问题描述

我想在 JavaScript 中获取当前的 UTC 日期,但以本地日期格式显示它(就像Date.toLocaleDateString()那样)。

我首先尝试获取当前的 UTC 日期,Date.toUTCString()但实际上并没有以本地格式打印出来。

然后我尝试使用中的选项配置toLocaleDateString(),但这只是打印本地日期而不是本地格式的 UTC 日期。例如新的Date().toLocaleDateString(options = {timeZone: "UTC"})

然后我尝试使用格式化Intl.DateTimeFormat(),但这只是给出了相同的结果Date.toLocaleDateString()

如果有办法获取语言环境格式,那么我很乐意使用该格式来格式化 UTC 日期,但据我所知,没有。

例如,new Date("Sat, 30 Mar 2019 00:27:19 GMT")在美国,我应该打印出“3/30/2019”,在欧洲,我应该打印出“30/3/2019”,等等,对于每个支持的语言环境。

但是,new Date("Sat, 30 Mar 2019 00:27:19 GMT").toLocaleDateString(options = {timeZone: "UTC"})将打印出“2019 年 3 月 29 日”。

标签: javascriptdate

解决方案


我还想使用本地化字符串设置来显示日期,就像这样toLocaleDateString()做一样,但使用日期的 UTC 值,而不是本地时区。

例如:

本地化 UTC 日期问题

我确实想要本地化的字符串格式,但我也想要 UTC 值而不是本地时区值。此示例中所需的输出将是4/3/2019,而不是4/2/2019


我承认@AndersonH​​appens 的建议,但我没有使用它。这是我所做的,而不是:

有一个getTimezoneOffset()函数,它提供本地时区偏移量。

我们可以使用这个函数结果并创建一个新的Date,应用差异。然后,我们可以toLocaleDateString()像往常一样直接使用本地化字符串格式获取日期:

本地化 UTC 日期解决方案

作为函数的解决方案可能是这样的:

function toLocaleUTCDateString(date, locales, options) {
    const timeDiff = date.getTimezoneOffset() * 60000;
    const adjustedDate = new Date(date.valueOf() + timeDiff);
    return adjustedDate.toLocaleDateString(locales, options);
}

推荐阅读