比如说我的是“2017-01”和“2017-05”
我想遍历输出全部的月份,怎样写才能输出
["2017-01","2017-02","2017-03","2017-04","2017-05"]
还有就是存在跨年的情况例如“2017-11”和“2018-03”
怎样输出
["2017-11","2017-12","2018-01","2018-02","2018-03"]
比如说我的是“2017-01”和“2017-05”
我想遍历输出全部的月份,怎样写才能输出
["2017-01","2017-02","2017-03","2017-04","2017-05"]
还有就是存在跨年的情况例如“2017-11”和“2018-03”
怎样输出
["2017-11","2017-12","2018-01","2018-02","2018-03"]
// 转换为时间戳
var startTime = new Date("2017-11").getTime();
var endTime = new Date("2018-03").getTime();
// 存放结果
var arr = []
// 最后的格式转换
var format = function(time) {
var date = new Date(time)
return date.getFullYear() + '-' + (date.getMonth() + 1)
}
// 判断是否为闰年
var isLeapYear = function(year) { return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0) }
// 月份映射 假设不为闰年
var MONTH = {
'1': 31,
'2': 28,
'3': 31,
'4': 30,
'5': 31,
'6': 30,
'7': 31,
'8': 31,
'9': 30,
'10': 31,
'11': 30,
'12': 31
}
arr.push("2017-11")
while (startTime < endTime) {
// 转换时间格式
var start = new Date(startTime)
// 判断是否为闰年的2月份
if (isLeapYear(start.getFullYear()) && (start.getMonth() + 1 === 2)) {
startTime = startTime + 29 * 24 * 60 * 60 * 1000
} else {
// 其他情况
startTime = startTime + MONTH[start.getMonth() + 1] * 24 * 60 * 60 * 1000
}
arr.push(format(startTime))
}
arr.push("2018-03")
console.log(arr)
写的有些麻烦
function getMonth(a,b){
var ayear = a.split('-')[0];
var amonth = a.split('-')[1];
var byear = b.split('-')[0];
var bmonth = b.split('-')[1];
var arr = [];
if(ayear == byear){
for(var i=amonth;i<=bmonth;i++){
arr.push(ayear+'-'+i);
}
}else{
for(var i=amonth;i<=12;i++){
arr.push(ayear+'-'+i);
}
for(var j=bmonth;j>=1;j--){
arr.push(byear+'-'+j);
}
var cyear = parseInt(ayear)+1;
for(var k=cyear;k<byear;k++){
for(var i=1;i<=12;i++){
arr.push(k+'-'+i)
}
}
}
console.warn(arr);
}
getMonth('2016-12','2017-4')
function allDate(start, end) {
start = start.split('-');
var res = [],
year = +start[0],
month = +start[1],
date = new Date(year, month, 0),
endTime = new Date(end).getTime();
while (date.getTime() <= endTime) {
res.push(year + '-' + month.toString().replace(/^(\d)$/, '0$1'));
//加一天,强制到下一月份
date = new Date(date.getTime() + 24 * 60 * 60 * 1000);
year = date.getFullYear();
month = date.getMonth() + 1;
date = new Date(year, month, 0);
}
res.push(end)
return res
}
console.log(allDate('2017-01', '2018-12'))
function getMonth(start,end) {
if(start === end) {
return [start]
}
// ...
var start = start.split('-');
var end = end.split('-');
var startYear = parseInt(start[0]);
var startMonth = parseInt(start[1]);
var yearCount = end[0] - startYear;
var monthCount = end[1] - startMonth;
var count = yearCount*12 + monthCount; // 两个时间相差的月数
var arr = [];
if (count < 0) {
count = -count; // 负数 就倒置
startYear = parseInt(end[0]);
startMonth = parseInt(end[1]);
}
for (var i=0; i<=count;i++) {
arr.push(startYear+ '-' +(startMonth>=10?startMonth:'0' + startMonth));
startMonth += 1;
if (startMonth === 13) {
startMonth = 1;
startYear += 1;
}
}
return arr;
}
呼呼哈哈 | 用了很多隐式转换的东西 为了减小代码量
function allMonth(start, end){
end = end.replace("-","");
var i = start.replace("-",""), result=[];
for(;;i++){
if(i.toString().substr(4) == 13) i=i+88;
if(i > end) return result;
var iString = i.toString();
result.push(iString.substr(0, 4) + "-" + iString.substr(4));
}
}
allMonth("2017-11","2018-03");
13 回答13k 阅读
8 回答2.8k 阅读
2 回答5.2k 阅读✓ 已解决
5 回答1.4k 阅读
7 回答2.2k 阅读
3 回答1.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
这是我的实现方式,仅供参考