iOS系统下JavaScript解析日期后星期几显示undefined问题求助
异常原因
iOS端所有浏览器均使用WebKit内核,其Date构造函数对日期字符串的解析规则和Windows、安卓端的V8内核(Chrome、Edge等浏览器使用)存在差异:你拼接得到的21-6-2021(DD-MM-YYYY)格式字符串,在WebKit内核下无法被识别为有效日期,new Date(alignedDate)会返回Invalid Date,调用getDay()方法时返回NaN,用NaN作为数组下标取值自然得到undefined。
修复方案
最稳妥的方案是直接向Date构造函数传入年、月、日三个数值参数,完全规避不同内核的字符串解析规则差异,该写法符合ECMAScript标准,全平台兼容。注意Date构造函数的月份参数从0开始计数,所以原API返回的月份需要减1。
修正后的代码如下:
const weekDays: string[] = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]; // 该部分代码包含在get请求逻辑中 const dateFormatAPI = (response.data.list[0].dt_txt).split("-") // 6-21-2021 -> ["月", "日", "年"] const date = new Date( Number(dateFormatAPI[2]), // 年 Number(dateFormatAPI[0]) - 1, // 月份从0开始计数,需减1 Number(dateFormatAPI[1]) // 日 ); console.log(weekDays[date.getDay()])
如果更偏好传入日期字符串的写法,可以将字符串拼接为YYYY/MM/DD格式(如2021/6/21),该格式的兼容性远高于带横杠的日期格式,可适配绝大多数浏览器。
内容的提问来源于stack exchange,提问作者niko
相关产品推荐
相关产品推荐

