javascript 中的奇怪日期问题

Weird date issue in javascript

我有一个包含交付日期列的 SharePoint 列表。我创建了一个 table 来使用 javascript 显示本周和下周的交货项目。一切正常,但对于几个团队成员来说,周四交付的项目显示在周三的单元格中,周五的项目显示在周四的单元格中。

我不确定为什么会这样。谁能帮我解决这个问题?任何帮助将不胜感激。

这是我的代码。添加警报以验证数据,我想知道为什么在第二个和第三个警报星期日显示星期一日期,而在第三个警报星期一显示星期二日期。在底部添加了警报消息。请指教

today = moment();

sundayDate = new Date(today.startOf('week'));
sundayShortDate = sundayDate.toLocaleDateString();
sundayTitle = getFormattedDate(sundayDate);

window.alert("sundayDate ::"+sundayDate+"");

monDate = new Date(sundayDate.setDate(sundayDate.getDate() + 1));
monSDate = monDate.toLocaleDateString();
monTitle = getFormattedDate(monDate);

window.alert("sundayDate ::"+sundayDate+"; monDate::"+monDate+"");

tueDate = new Date(monDate.setDate(monDate.getDate() + 1));
tuesSDate = tueDate.toLocaleDateString();
tueTitle = getFormattedDate(tueDate);

window.alert("sundayDate ::"+sundayDate+"; monDate::"+monDate+"; tueDate::"+tueDate+"");

First window alert:
sundayDate ::Sun Aug 16 2020 00:00:00 GMT-0400 (Eastern Daylight Time)

Second Alert:
sundayDate ::Mon Aug 17 2020 00:00:00 GMT-0400 (Eastern Daylight Time); monDate::Mon Aug 17 2020 00:00:00 GMT-0400 (Eastern Daylight Time)

Third Alert:
sundayDate ::Mon Aug 17 2020 00:00:00 GMT-0400 (Eastern Daylight Time); monDate::Tue Aug 18 2020 00:00:00 GMT-0400 (Eastern Daylight Time); tueDate::Tue Aug 18 2020 00:00:00 GMT-0400 (Eastern Daylight Time)

您将 sundayDate 设置为 sundayDate.setDate(sundayDate.getDate() + 1) 你应该做: monDate = new Date(sundayDate.getDate() + 1);

P.S。 我不确定混合使用 moment.js 和 js Date 是否是个好主意。

如前所述,您正在通过调用 setDate().

来改变日期

因为您已经使用了 moment,所以不要切换回 Date 对象,而是坚持使用 moment 对象。

例如:

let today = moment();

let fmt = "dddd, MMMM Do YYYY";
let sunDate = today.startOf('week');
let sunShortDate = sunDate.format(fmt);
let monDate = sunDate.clone().add(1, "day");
let monShortDate = monDate.format(fmt);
let tueDate = monDate.clone().add(1, "day");
let tueShortDate = tueDate.format(fmt);

console.log({ sunShortDate, monShortDate, tueShortDate });
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>

就像Date对象一样,moment对象也是可变的,所以你应该先调用clone再调用add