You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Intl.DateTimeFormat()返回数字格式的星期值?

解决Intl.DateTimeFormat返回数字星期的需求

你之前的代码报错主要有几个问题:

  • timeZone: America/New_York 缺少引号,应该写成字符串'America/New_York'
  • now变量未定义,需要先声明
  • 用day.format(now)返回的英文星期名称(比如Sunday)当数组索引,但你的数组存的是数字字符串,完全不匹配,自然拿不到值

下面给两种简便的实现方法:

方法1:直接基于时区转换获取星期数字

如果只是需要目标时区的星期数字(周日=0、周一=1...),可以先把时间转换为对应时区的日期,再用getDay()方法(该方法本身就返回0-6的星期值):

const now = new Date();
// 将当前时间转换为纽约时区的日期字符串,再转为Date对象
const nyDate = new Date(now.toLocaleString('en-US', { timeZone: 'America/New_York' }));
const weekdayNumber = nyDate.getDay();
console.log('Weekday:', weekdayNumber);

方法2:用Intl格式化结果映射数字

这种方法贴合你原本使用Intl.DateTimeFormat的思路,先拿到星期名称,再通过映射表转成数字:

const now = new Date();
const dayFormatter = new Intl.DateTimeFormat('en-US', {
    timeZone: 'America/New_York',
    weekday: 'long',
});
// 定义星期名称到数字的映射表
const weekdayMap = {
    Sunday: 0,
    Monday: 1,
    Tuesday: 2,
    Wednesday: 3,
    Thursday: 4,
    Friday: 5,
    Saturday: 6
};
// 格式化后获取星期名称,再映射为数字
const weekdayName = dayFormatter.format(now);
const weekdayNumber = weekdayMap[weekdayName];
console.log('Weekday:', weekdayNumber);

如果想更精准地提取星期部分,可以用formatToParts方法:

const now = new Date();
const formatParts = new Intl.DateTimeFormat('en-US', {
    timeZone: 'America/New_York',
    weekday: 'long'
}).formatToParts(now);
// 从格式化结果中提取星期名称
const weekdayName = formatParts.find(part => part.type === 'weekday').value;
const weekdayMap = { Sunday:0, Monday:1, Tuesday:2, Wednesday:3, Thursday:4, Friday:5, Saturday:6 };
const weekdayNumber = weekdayMap[weekdayName];
console.log('Weekday:', weekdayNumber);

内容的提问来源于stack exchange,提问作者Learner-Driver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:16:15