例如,如果我选择了任何两个日期 var d1 =' 2014-05-01&#39 ;; var d2 =' 2017-06-01';
现在我想显示这两个日期之间的所有月份?有可能吗?
答案 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 - 修正上述代码段以包含回调函数
使用回调执行“按月”操作,例如将其记录到控制台或将其写入文档。