我想在 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”。
我还想使用本地化的字符串设置显示日期,就像toLocaleDateString()那样,但使用日期的 UTC 值,而不是本地时区。
例如:
我确实想要本地化的字符串格式,但我也想要 UTC 值而不是本地时区值。此示例中所需的输出将是4/3/2019, 而不是4/2/2019。
我承认@AndersonHappens 建议,但我没有使用它。这是我所做的,而不是:
有一个getTimezoneOffset()函数,它提供本地时区偏移量。
我们可以使用这个函数 result 并创建一个新的Date,应用差异。然后,我们可以toLocaleDateString()像往常一样直接使用本地化字符串格式获取日期:
作为函数的解决方案可能是这样的:
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)
你几乎猜对了 - 该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)