在while循环中从日期到日期计数

时间:2017-09-18 15:03:38

标签: javascript loops date while-loop

我想使用while循环从一个日期计算到另一个日期并计算第一天+ 1直到它到达最后日期。

例如:

var start = new Date(2011, 08, 15);
var end = new Date(2017, 09, 28);
var expired = false;

while (!expired) {
    // very first iteration would count day + 1 so it will be 2011-08-16
    // and so on till 2017-09-28
    // check if end date and set expired to true, finished while loop
}

alert("Finished!");

我不知道该如何做到这一点(其他anwers没有帮助)。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以在start.setDate(start.getDate() + 1)中使用 .getDate() .setDate() 方法将日期增加一天,这就是应该是你的代码:

while (!expired) {
    start.setDate(start.getDate() + 1);
    // and so on till 2017-09-28
    if(dateDiffInDays(start, end) == 0) {
       expired = true;
    }
    count++;
}
console.log(count);
alert("Finished!");

<强>演示:

// A useful function to get dates diff in days gotten from: https://stackoverflow.com/a/15289883/3669624
function dateDiffInDays(a, b) {
  var _MS_PER_DAY = 1000 * 60 * 60 * 24;  
  var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
  var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
  return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}

var start = new Date(2011, 08, 15);
var end = new Date(2017, 09, 28);
var expired = false;

var count =0;

while (!expired) {
    start.setDate(start.getDate() + 1);
    // and so on till 2017-09-28
    if(dateDiffInDays(start, end) == 0) {
       expired = true;
    }
    count++;
}
console.log(count);
alert("Finished!");

start日期将在每次迭代中增加一天,直到达到end日期的同一天,最后到最后count变量将保持两天之间的日期这两天。

答案 1 :(得分:0)

使用getDate方法

var start = new Date(2011, 08, 15);
var end = new Date(2017, 09, 28);
var expired = false;
var count = 0;
while (!expired) {
count++;
  if(start.getYear() == end.getYear() && start.getMonth() == end.getMonth() && start.getDate() == end.getDate()){
    expired = true;
  }
  start.setDate(start.getDate()+1);
}
console.log(count);
alert("Finished!");

答案 2 :(得分:0)

您可以使用getTime()方法。

  1. 使用getTime()将日期转换为毫秒。
  2. 每循环迭代添加86400秒(每天总秒数)到start
  3. 等到警报(循环完成)。
  4. 注意

    new Date(2011, 08, 15)是2011年9月15日,而不是8月。

    new Date(2017, 09, 28)是2017年10月28日,而不是9月。

    请参阅this作为参考,或查看下面的代码段。

    &#13;
    &#13;
    var start = new Date(2011, 08, 15).getTime();  // convert time into milliseconds
    var end = new Date(2017, 09, 28).getTime();    // convert time into milliseconds
    var expired = false;
    var count = 0;
    
    /* NOT 15 AUGUST 2011 */
    console.log(new Date(2011, 08, 15).toString());
    console.log(new Date(2017, 09, 28).toString());
    /* NOT 28 SEPTEMBER 2017 */
    
    while (!expired) {
        start += 24*60*60;  // One day has 24 hours * 60 minutes * 60 seconds = 86400 seconds
        count++;
        if (start >= end) expired = true;
    }
    
    alert(`Days In Between: ${count} days`);
    &#13;
    &#13;
    &#13;