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

JavaScript中如何向Date函数传入字符串数组元素正确获取星期名

问题根源
  • 代码将存储了所有生日字符串的数组getBirthDate整体传入Date构造函数,Date无法解析数组类型入参,会生成无效日期对象,调用getDay()得到的返回值是NaN,无法匹配星期名称数组的索引,最终返回undefined。
  • 直接传入MM-DD-YYYY格式的字符串给Date构造函数存在跨浏览器解析不一致的问题,部分环境下会解析出错误日期。
修复实现

不需要单独提取生日数组,直接遍历原数据时逐个处理单条日期即可,同时手动拆分日期字符串保证解析准确性,完整代码如下:

const array = [{
    name: 'Dwayne Langer',
    birthdate: '06-03-2001'
},
{
    name: 'Doffer Henry',
    birthdate: '06-01-2005'
}]

const getDayName = (dateStr) =>{
    // 拆分MM-DD-YYYY格式字符串,转成数字类型的年/月/日
    const [month, day, year] = dateStr.split('-').map(Number);
    // Date构造函数的月份参数从0开始计数,需将月份值减1再传入
    const date = new Date(year, month - 1, day);
    const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
    return days[date.getDay()];
}

// 遍历原数组,为每条数据补充对应的星期字段
const userList = array.map(user => {
    return {
        ...user,
        birthWeekDay: getDayName(user.birthdate)
    }
});

console.log(userList);
/* 运行输出:
[
  {
    name: 'Dwayne Langer',
    birthdate: '06-03-2001',
    birthWeekDay: 'Sunday'
  },
  {
    name: 'Doffer Henry',
    birthdate: '06-01-2005',
    birthWeekDay: 'Wednesday'
  }
]
*/
注意事项
  • Date构造函数仅支持接收单个合法日期值/字符串/时间戳作为入参,不能直接传入数组,必须逐元素处理。
  • 处理非ISO标准格式(YYYY-MM-DD)的日期字符串时,优先手动拆分后传入年、月、日参数,避免不同浏览器解析规则差异导致的日期错误。
  • 传入数字类型月份给Date构造函数时,取值范围为0(代表1月)到11(代表12月),直接传入拆分出的月份数字会导致日期偏移1个月,必须做减1处理。

内容的提问来源于stack exchange,提问作者Nagendra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:39:20