【问题标题】:Moment.js while loop in javascript, node.jsMoment.js while循环在javascript,node.js中
【发布时间】:2018-04-07 19:13:34
【问题描述】:

代码假设用给定的开始日期和结束日期之间的日期填充数组。我正在使用 Node.js。

var startDate = moment(startDay);
var endDate = moment(endDay);
var datesBetween = [];

var startingMoment = startDate;


while(startingMoment <= endDate) {
    datesBetween.push(startingMoment);
    startingMoment.add(1, 'days');
}

console.log(datesBetween);

【问题讨论】:

  • 必须同步吗?
  • 您将相同的对象推送到数组中的每个索引。根据循环的最后一次迭代,所有日期都将具有相同的日期,因为它们是同一个对象
  • 请在编辑器中使用堆栈 sn-p:&lt;&gt; 在此处发布minimal reproducible example。您的代码没有按预期工作的特殊原因
  • 为什么这被标记为[异步]?您发布的代码与异步无关。

标签: javascript node.js while-loop momentjs


【解决方案1】:

每次迭代都需要创建一个新对象,否则每次都将相同的对象引用推送到数组中。它们都会以最后一个日期结束,因为它都是同一个对象

您可以使用moment.clone()每次克隆对象

var startDay = new Date(2018,1,1);
var endDay = new Date(2018,1,4);

var startDate = moment(startDay);
var endDate = moment(endDay);
var datesBetween = [];

var startingMoment = startDate;


while(startingMoment <= endDate) {
    datesBetween.push(startingMoment.clone());// clone to add new object
    startingMoment.add(1, 'days');
}

console.log(datesBetween);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 2014-12-14
    • 2018-02-19
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多