const d = new Date(); // get 'now'
d.getDay(); // 0 = Sunday, 1 = Monday... in my browser's timezone.
d.toLocaleDateString('en-GB', { timeZone: 'NZ' }); // formatted date in NZ
console.log(d);
如何在新西兰获得数字日?toLocaleDateString
不支持weekday: 'numeric'
我能想到的唯一方法就是把这一天映射到星期六,星期天…然后用{Sun: 0...}
映射把它映射回一个数字?!
编辑:要明确的是:给定时间的星期几在不同的时区会有所不同。但是Date.getDay()
只返回浏览器时区中的数字日期。toLocaleDateString
可以在不同的时区显示日期,但是它似乎不支持将日/工作日作为数字输出,这似乎是一个令人惊讶的遗漏。
另外,我不想使用一些废弃的大型库(看着你,时刻),而是我想使用香草Javascript。
好吧,截至2022年4月,显然没有办法!这是我的变通方法:
// This date is Wednesday 2022-04-20 13:00:00 at UTC/GMT
// In NZ, it is Thursday 2022-04-21 01:00:00
const d = new Date(Date.UTC(2022, 3, 20, 13, 0, 0));
const timeZone = 'NZ';
const numericDayInNZ =
['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
.indexOf(d.toLocaleDateString('en-GB', {weekday:'short', timeZone}));
console.log("At UTC date: ", d,
"your timezone has a numeric day of:", d.getDay(),
"and in NZ it is", numericDayInNZ);
-
注意:如果你想在你自己的语言环境中使用这段代码,你可以改变
en-GB
和所有的日期名称,或者如果这是不冒犯的,你需要的只是数字,就保持原样。 -
方便的事情是,你可以重新安排的日子,例如把
Sun
最后,如果你想0 =星期一。 -
我认为在规范中没有在
Date.prototype.toLocale(Date|Time)?String
函数中包含等效的Date.prototype.getDay
是一个疏忽,但至少这个解决方案足够有效,并且不需要庞大的第三方库。