如何使用JS列出两个日期之间的所有月份?

时间:2017-06-06 08:46:52

标签: javascript

例如,如果我选择了任何两个日期       var d1 =' 2014-05-01&#39 ;;       var d2 =' 2017-06-01';

现在我想显示这两个日期之间的所有月份?有可能吗?

1 个答案:

答案 0 :(得分:2)

var namedMonths = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
//Format: yyyy-mm-dd
function stringToDate(datestring) {
  var d = new Date(0);
  d.setHours(2);
  d.setFullYear(parseInt(datestring.substr(0, 4), 10));
  d.setMonth(parseInt(datestring.substr(5, 2), 10));
  d.setDate(parseInt(datestring.substr(8, 2), 10));
  return d;
}

function monthsBetween(from, to, cb) {
  if (cb === void 0) {
    cb = function(month) {};
  }
  //Convert to date objects
  var d1 = stringToDate(from);
  var d2 = stringToDate(to);
  //month counter
  var months = 0;
  //Call callback function with month
  cb(d1.getMonth());
  //While year or month mismatch, reduce by one day
  while (d2.getFullYear() != d1.getFullYear() || d2.getMonth() != d1.getMonth()) {
    var oldmonth = d1.getMonth();
    d1 = new Date(d1.getTime() + 86400000);
    //if we enter into new month, add to month counter
    if (oldmonth != d1.getMonth()) {
      //Call callback function with month
      cb(d1.getMonth());
      months++;
    }
  }
  //return month counter as result
  return months;
}
//test
var d1 = '2014-05-01';
var d2 = '2017-06-01';
console.log(monthsBetween(d1, d2, function(month) {
  console.log(namedMonths[month]);
}), "months between:", d1, "and", d2);

编辑1 - 修正上述代码段以包含回调函数

使用回调执行“按月”操作,例如将其记录到控制台或将其写入文档。