JSFiddle - React, Tailwind, and code Playground
JavaScript
// please fork before modifying
var dateMath = function(aDate) {
// var dat = new Date();
var dat = aDate;
dat.setHours(0, 0, 0, 0);
var LDOM = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Last Day Of Month
var setDate_ = function(aDate) {
dat = aDate;
dat.setHours(0, 0, 0, 0); // set to midnight
};
var getDate_ = function() {
return dat;
};
// update for century rules (someday!)
var isLeapYear = function() {
return 0 === dat.getFullYear() % 4;
};
var getLastDayFeb = function() {
return isLeapYear() ? 29 : LDOM[1];
};
var isLastDay_ = function() {
return dat.getMonth() !== 1 ? dat.getDate() === LDOM[dat.getMonth()] : dat.getDate() === getLastDayFeb();
};
var addDays_ = function(days) {
return dat.setDate(dat.getDate() + days);
};
var addWeeks_ = function(weeks) {
return dat.setDate(dat.getDate() + weeks * 7);
};
var addMonths_ = function(months) {
var d1 = dat.getDate();
dat.setMonth(dat.getMonth() + months);
//alert(dat.getDate() +"\n"+d1);
if (dat.getDate() !== d1) {
//addDays_(-1); // Does not work. Jan 31, 2012 + 1 month = March 2nd, 2012
addDays_(-dat.getDate());
}
return dat;
};
var monthsBetweenDates = function() {
// TODO:
};
// dateMathObj = {
return {
isLastDay: isLastDay_,
addDays: addDays_,
addWeeks: addWeeks_,
addMonths: addMonths_,
getDate: getDate_,
setDate: setDate_
};
// return dateMathObj;
}(new Date());
dateMath.addDays(180); // add 180 days to current date
alert(dateMath.getDate() + "\n" + dateMath.isLastDay());
dateMath.setDate(new Date(2012, 9, 31)); // test last day of month method
alert(dateMath.getDate() + "\n" + dateMath.isLastDay());
dateMath.setDate(new Date(2012, 2, 31)); // add 1 month to Mar 31 and is it last...