使用 moment.js 获取日期范围

问题描述 投票:0回答:1

我正在尝试使用 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');
momentjs date-range
1个回答
0
投票

您看到的问题可能是由于未克隆

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

© www.soinside.com 2019 - 2024. All rights reserved.