【问题标题】:Push a date to an array with moment js nodejs使用时刻 js nodejs 将日期推送到数组
【发布时间】:2021-10-29 09:15:20
【问题描述】:

我正在 NodeJs 中编写一个函数,其中获取 2 个日期会返回一个包含该范围内所有日期的数组。 相反,我得到了一个数组,它在相同的日期添加到它,并且每次都删除它自己。

例如:获取开始日期 1/11/2026 和结束日期 3/11/2026 它应该返回 [1/11/2026, 2/11/2026, 3/11/2026] 现在它可以: [1/11/2026],[2/11/2026, 2/11/2026],[3/11/2026, 3/11/2026, 3/11/2026]

我尝试从 while 格式中移出,但我将其转换为字符串 我尝试拥有 2 个数组并使用扩展运算符,但没有成功

这是我的代码:

const dateList = ({ start, end }) => {
    let now = moment(start);
    const end = moment(end);
    let dates = [];
    while (now.format('YYYY-MM-DD') <= end.format('YYYY-MM-DD')) {
        dates.push(now);
        now = now.add(1, 'days');
    }
    return dates;
}

【问题讨论】:

    标签: javascript node.js momentjs backend


    【解决方案1】:

    const dateList = ({ start, end }) => {
        let now = moment.utc(start);
        end = moment.utc(end);
        let dates = [];
        while (now.isValid() && end.isValid() && now.isSameOrBefore(end, 'day') /* end day inclusive */) {
            dates.push(now);
            now = moment(now).add(1, 'days'); // add 1 day on a new instance 
        }
        return dates;
    }
    
    console.log(dateList({start: '2026-05-12', end: '2026-05-14'}))
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"&gt;&lt;/script&gt;


    【讨论】:

      【解决方案2】:

      对象的瞬间使用实例

      您的变量now 是一个时刻日期的实例,因此如果您将它推送到数组中并将他的日期设置为+1,那么您数组中的实例也会得到此更改,因为它是同一个实例。您需要推送您的时刻实例的克隆。

      const dateList = ({ start, end }) => {
          let now = moment(start);
          const end = moment(end);
          let dates = [];
          while (now.format('YYYY-MM-DD') <= end.format('YYYY-MM-DD')) {
              dates.push(now.clone());
              now = now.add(1, 'days');
          }
          return dates;
      }
      

      您可以使用矩查询来测试end 是否在now 之后。

      while(now.format('YYYY-MM-DD') &lt;= end.format('YYYY-MM-DD')) => while(now.isSameOrBefore(end))

      最终代码:

      const dateList = ({ start, end }) => {
          let now = moment(start);
          const end = moment(end);
          let dates = [];
          while (now.isSameOrBefore(end)) {
              dates.push(now.clone());
              now = now.add(1, 'days');
          }
          return dates;
      }
      

      【讨论】:

        猜你喜欢
        • 2019-08-15
        • 1970-01-01
        • 2016-09-17
        • 1970-01-01
        • 1970-01-01
        • 2017-03-05
        • 1970-01-01
        • 2020-11-11
        • 1970-01-01
        相关资源
        最近更新 更多