JavaScript中getDay()返回星期数少一天问题求助
问题排查与解决方案
核心问题原因
你遇到的星期数少一天问题,本质是时区解析差异导致的:
<input type="date">返回的日期值是YYYY-MM-DD格式的字符串,JavaScript创建Date对象时会默认以UTC时区解析该字符串。- 若你的本地时区(比如东八区)比UTC早,解析后的日期会对应本地时间的前一天(例如选择
2024-05-20,东八区会解析为2024-05-19T16:00:00),调用getDay()自然得到前一天的星期数。
解决方案
以下两种方法都能解决问题,任选其一即可:
方法1:拼接中午时间避免时区偏移
手动给日期字符串拼接T12:00:00,确保解析的是当天的中间时间,不受时区偏移影响:
function set_day_number() { const dateStr = document.getElementById("idDATE").value; const dt = new Date(`${dateStr}T12:00:00`); document.getElementById("Day_number").value = dt.getDay(); }
方法2:调整时区偏移量
通过时区偏移量将UTC时间修正为本地日期的0点:
function set_day_number() { const dt = new Date(document.getElementById("idDATE").value); // 加上时区偏移分钟数,把UTC时间转成本地日期的0点 dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset()); document.getElementById("Day_number").value = dt.getDay(); }
额外说明
如果你的需求是返回1(周一)到7(周日)的星期数(而非getDay()默认的0-6),可以修改赋值逻辑:
const dayNum = dt.getDay(); document.getElementById("Day_number").value = dayNum === 0 ? 7 : dayNum;
内容的提问来源于stack exchange,提问作者ONTIVER
相关产品推荐
相关产品推荐

