I handle it stupidly, concatenating a string
let daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; let months = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; var target = nexttarget = lasttarget = "29"; //target day if (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) { daysInMonths[1] = 29; } function findLastDay(target, month){ if(target > daysInMonths[month]){ target = daysInMonths[month]; } return target; }
then
var d = new Date(); var year = d.getFullYear(); var month = d.getMonth(); target = findLastDay(target, month); var this_month = year+"-"+months[month]+"-"+target; console.log(this_month);//2018-03-29 // next month if(month == 11){ nextmonth = 0; nextyear = year + 1; }else{ nextmonth = month+1; nextyear = year; } nexttarget = findLastDay(nexttarget, nextmonth); var next_month = nextyear+"-"+months[nextmonth]+"-"+nexttarget; console.log(next_month);//2018-04-29 //last month if(month == 0){ lastmonth = 11; lastyear = year - 1; }else{ lastmonth = month - 1; lastyear = year; } lasttarget = findLastDay(lasttarget, lastmonth); var last_month = lastyear+"-"+months[lastmonth]+"-"+lasttarget; console.log(last_month);//2018-02-28
source share