是否有获取语言环境字符串格式的 UTC 日期的函数?

And*_*ens 5 javascript date

我想在 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"})将改为打印“3/29/2019”。

J. *_*uni 9

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

例如:

本地化UTC日期问题

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


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

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

我们可以使用这个函数 result 并创建一个新的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);
}
Run Code Online (Sandbox Code Playgroud)


And*_*uez 6

你几乎猜对了 - 该timeZone选项在第二个参数中可用。第一个参数toLocaleDateString是针对语言环境的。

当选项是第二个参数时,您问题中的这个示例有效(并且比其他答案简单得多):

const usLocale = 'en-US'
new Date('Sat, 30 Mar 2019 00:27:19 GMT').toLocaleDateString(usLocale, {
  timeZone: 'UTC',
})
// '3/30/2019'

const ukLocale = 'en-GB'
new Date('Sat, 30 Mar 2019 00:27:19 GMT').toLocaleDateString(ukLocale, {
  timeZone: 'UTC',
})
// '30/03/2019'

Run Code Online (Sandbox Code Playgroud)