我正在尝试使用 moment.js 获取周六到周日的日期范围。 它适用于最后一行,之后开始日期和结束日期都等于结束日期。
使用今天的日期(2024 年 11 月 1 日),我可以看到 startDate 更改为 10/26(上周六),startDate.add(7, 'd') 计算结果为 11/02,但就在两者都变为 11/02 之后。
我认为 startDate.add(7, 'd') 首先更改 startDate,然后将其分配给 endDate (我错了):
var today = moment(new Date());
var startDate;
var endDate;
var weekStart = today.subtract(7, 'd'); // 7 days ago
if (weekStart.day() === 6 ){ // Saturday
startDate = weekStart;
}
else{
startDate = weekStart.day(6);
}
endDate = startDate.add(7, 'd');
您看到的问题可能是由于未克隆
startDate
和 endDate
造成的。您需要克隆它们,因为它们引用相同的 moment 对象。当您调用 startDate.add(7, 'd')
时,它会就地修改 startDate
,这也会影响 endDate
,因为它们指向同一个对象。
要解决此问题,您可以执行以下操作:
var moment = require('moment'); // Import/Require moment
var today = moment(new Date());
var startDate;
var endDate;
var weekStart = today.subtract(7, 'd'); // 7 days ago
if (weekStart.day() === 6) { // Saturday
startDate = weekStart;
} else {
startDate = weekStart.day(6);
}
// Clone startDate to create endDate
endDate = startDate.clone().add(7, 'd');
console.log("Start Date:", startDate.format("MM/DD/YYYY")); // Should show last Saturday
console.log("End Date:", endDate.format("MM/DD/YYYY")); // Should show next Sunday
使用
startDate.clone()
,您可以创建一个独立于 startDate
的新矩对象,因此修改 endDate
不会影响 startDate
。