Rangepicker组件遍历选择的日期会出错?

想把选中的日期遍历出来,发现每次选中后不是对应的日期,遍历出来的日期也是不正确的

//组件
`
<RangePicker separator={'至'} onOpenChange={this.openDateRangePicker}

                              onChange={this.onChangeDate}/>

`
//选择日期
`
onChangeDate = (e, str) => {

this.createScheduleData(e);
console.log(e, str);

};
`

//遍历
`
createScheduleData = (moment) => {

console.log(moment);
let date = 0;
let scheduleData = [];
if (moment.length > 0) {
  let date1 = new Date(moment[0].format('YYYY,MM,DD'));
  let date2 = new Date(moment[1].format('YYYY,MM,DD'));
  date = (date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24);
  for (let i = 0; i < date; i++) {
    let dateStr = moment[0].subtract(i, 'days').format('YYYY/MM/DD');
    let myDate = new Date(Date.parse(dateStr));
    scheduleData.push({
      id: i ,
      date: dateStr+ weekDay[myDate.getDay()], //这里出现的日期字符串不正确
    });
  }
  this.setState({
    scheduleData: scheduleData,
  });
}

};
`

clipboard.png

阅读 2k
1 个回答

有可能是引用传递,你在计算日期的时候修改了你的moment,所以日期变了
我重新写了下moment()就是moment.js

 createScheduleData = date => {
    if (date && date.length > 0) {
      const [start, end] = date;
      // 用字符串数组避免对象引用
      const arr = new Array(end.diff(start, 'days')).fill(0).reduce(
        acc => {
          const last = moment(acc.slice(-1)[0]);
          return acc.concat(last.add(1, 'days').format('YYYY-MM-DD'));
        },
        [start.format('YYYY-MM-DD')],
      );
      console.log(date.map(item => item.format('YYYY-MM-DD')));
      console.log(arr);
    }
  };
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进