如何在Javascript中获得给定时区的数字星期?



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是一个疏忽,但至少这个解决方案足够有效,并且不需要庞大的第三方库。

相关内容

  • 没有找到相关文章

最新更新