使用Moment.js获取周六至周日日期范围时遇赋值异常问题
Moment.js 日期赋值后两个变量值一致的问题
你猜测的完全没错——Moment.js的add()、subtract()这类方法是原地修改调用它的对象的,不是返回新对象。所以你执行endDate = startDate.add(7, 'd')时,先把startDate本身改成了加7天后的日期,然后endDate只是指向了同一个Moment对象,最后两个变量自然一模一样。
以你说的2024年11月1日为例:
- 处理后
startDate是10月26日(上周六) - 调用
startDate.add(7, 'd')时,startDate直接变成11月2日 endDate接收的是修改后的startDate的引用,所以两者都是11月2日
解决方法
要避免这个问题,需要先克隆startDate再修改,Moment.js提供了clone()方法:
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.clone().day(6); } // 先克隆startDate,再对克隆后的对象执行add操作 endDate = startDate.clone().add(7, 'd');
额外补充:weekStart.day(6)其实也是原地修改weekStart的操作,如果你后续还要用到原始的weekStart值,上面的代码里已经给这一步加上了clone(),避免意外修改原对象。
内容的提问来源于stack exchange,提问作者NoBullMan
相关产品推荐
相关产品推荐

