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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:59:51