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

Angular中使用mydatepicker出现日期显示提前一天问题

解决mydatepicker日期偏移问题(无需moment)

这个坑我之前踩过!你遇到的日期早一天的问题,根源在于toISOString()这个方法——它会把本地时区的日期对象转换成UTC时区的字符串,而mydatepicker返回的jsdate是对应你本地时区的「当日0点」,当你的时区比UTC早(比如东八区),这个时间转成UTC就会变成前一天的下午/晚上,截取前10位自然就得到了前一天的日期。

既然项目不让用moment,我们可以直接手动提取本地日期的年、月、日来拼接,完全避开时区问题:

onDateChange(event) {
  const selectedDate = event.jsdate;
  // 获取本地时区的年、月、日
  const year = selectedDate.getFullYear();
  // 注意:月份是从0开始计数的,所以要加1
  const month = String(selectedDate.getMonth() + 1).padStart(2, '0');
  const day = String(selectedDate.getDate()).padStart(2, '0');

  // 生成你需要的两种格式二选一
  this.selectDate = `${year}-${month}-${day}`; // 输出:2018-03-20
  // this.selectDate = `${year}${month}${day}`; // 输出:20180320
}

如果你的项目环境不支持ES2017的padStart方法,可以自己写个简单的补零函数兼容:

// 补零工具函数
private padZero(num: number): string {
  return num < 10 ? `0${num}` : `${num}`;
}

// 调用的时候替换成:
const month = this.padZero(selectedDate.getMonth() + 1);
const day = this.padZero(selectedDate.getDate());

这种方法直接读取本地时区的日期信息,完全不会受UTC转换的影响,就能准确得到用户选中的日期啦!

内容的提问来源于stack exchange,提问作者apple_92

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:47:54