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
相关产品推荐
相关产品推荐

