JavaScript Date getDay() 获取YYYY-MM-DD日期星期值不符问题
日期星期计算偏差的原因
- JavaScript 中
new Date()对YYYY-MM-DD格式的纯日期字符串,默认按照UTC标准时区的零点时刻解析,而非设备所在本地时区的零点时刻。 - 当设备所处时区与UTC存在时差时,这个以UTC定义的时刻,换算为本地时间会偏移到相邻自然日。比如西时区环境下,UTC时间的2021-02-04 00:00,对应本地时间仍是2021-02-03的夜间,
getDay()就会返回周三对应的数值3,和预期的周四数值4产生偏差。
符合要求的实现方式
全程不修改searchDate本身的字符串格式,仅在生成Date实例时做解析适配,保证拿到的星期值和本地自然日的实际星期对应:
- 方案一:在原日期字符串后拼接本地零点时间标识,强制构造器按本地时区解析:
const searchDate = "2021-02-04"; // 未修改searchDate本身,仅拼接为带时间的本地时区格式 const targetDate = new Date(`${searchDate}T00:00:00`); const dayOfWeek = targetDate.getDay(); // 返回预期的4,对应周四 - 方案二:将字符串内的日期分隔符从
-替换为/,这种格式的日期字符串会被构造器自动按本地时区解析:const searchDate = "2021-02-04"; const targetDate = new Date(searchDate.replace(/-/g, '/')); const dayOfWeek = targetDate.getDay(); // 同样返回预期的4
两种方案均未改动
searchDate原始的"2021-02-04"存储格式,完全匹配“不修改原日期格式”的约束要求。
内容的提问来源于stack exchange,提问作者José Cabrera
相关产品推荐
相关产品推荐

