我希望在JavaScript中获得当前的UTC日期,但以本地日期格式显示它(就像Date.toLocaleDateString()那样)。
我最初尝试使用Date.toUTCString()获取当前的UTC日期,但实际上并没有以本地格式打印出来。
然后我尝试使用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“。
发布于 2019-04-08 10:57:37
我还希望像toLocaleDateString()一样使用本地化字符串设置显示日期,但使用日期的UTC值,而不是本地时区。
例如:

我确实想要本地化的字符串格式,但我也想要UTC值而不是本地时区值。本例中所需的输出是4/3/2019,而不是4/2/2019。
我承认了@AndersonHappens的建议,但我没有使用它。相反,我是这样做的:
有一个getTimezoneOffset()函数,它提供本地时区偏移量。
我们可以使用这个函数的结果,并创建一个新的Date,应用diff。然后,我们可以像往常一样直接使用toLocaleDateString()获取本地化字符串格式的日期:

作为一个函数,解决方案可以如下所示:
function toLocaleUTCDateString(date, locales, options) {
const timeDiff = date.getTimezoneOffset() * 60000;
const adjustedDate = new Date(date.valueOf() + timeDiff);
return adjustedDate.toLocaleDateString(locales, options);
}发布于 2019-03-30 01:45:49
给定日期,您可以使用new Intl.DateTimeFormat()获得区域设置格式。然后可以使用formatToParts来获取日期和每个特定组件的格式。
按照文档中的示例,我创建了以下方法以获取地区字符串中的UTC日期。
function toLocaleUTCDateString(date) {
let formatter = new Intl.DateTimeFormat();
return formatter.formatToParts(date).map(({type, value}) => {
switch (type) {
case 'day': return date.getUTCDate();
case 'hour': return date.getUTCHours();
case 'minute': return date.getUTCMinutes();
case 'month': return date.getUTCMonth() + 1;
case 'second': return date.getUTCSeconds();
case 'timeZoneName': return "UTC";
case 'year': return date.getUTCFullYear();
default : return value;
}
}).reduce((string, part) => string + part);
}但是,请注意,此方法不记得数字与字符串格式。例如,如果要将3月显示为“want”(或特定的语言月份字符串),而不是显示为数字3,则必须自己决定如何做到这一点。它也不处理工作日的差异,所以如果当地的日期是“周五”,而世界贸易委员会的日期是“星期六”,你也必须分开计算。
发布于 2022-01-24 22:58:17
您几乎正确地理解了- 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'https://stackoverflow.com/questions/55427168
复制相似问题