我正在尝试使用 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
因为它们指向同一个对象。为了修复这个问题,你可以做类似的事情:
使用
startDate.clone()
,您可以创建一个独立于的新时刻对象startDate
,以便修改endDate
不会影响startDate
。