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
。
我有一个包含交付日期列的 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
。