Сегодня научимся прибавлять определенное количество дней, месяцев и лет к датам. Иногда эта возможность бывает очень кстати.
Задавая отрицательное значение n, получим вычитание. Внимательно читайте комментарий в начале функции.
Date.prototype.add=function(n,t)
// прибавляет к дате n дней, месяцев или лет
// t может быть равно 'd','day','days' для дней;
// 'm','month','months' для месяцев;
// 'y','year','years' для лет
// t еще может быть равно 'm-1d','month-1day','months-1day'
// - прибавить n месяцев и отнять один день
// t еще может быть равно 'y-1d','year-1day','years-1day'
// - прибавить n лет и отнять один день
// если t не указано или имеет иное значение, используется 'd'
// при ошибке возвращает false
{
var r=new Date(this);
var q='';
if (typeof(n)=='number')
if (n.isInt())
{
if (typeof(t)=='string') q=t.toUpperCase();
switch(q)
{
case 'M':
case 'MONTH':
case 'MONTHS':
r.setMonth(r.getMonth()+n);
break;
case 'M-1D':
case 'MONTH-1DAY':
case 'MONTHS-1DAY':
r.setMonth(r.getMonth()+n);
if (n>=0)
r.setDate(r.getDate()-1);
else
r.setDate(r.getDate()+1);
break;
case 'Y':
case 'YEAR':
case 'YEARS':
r.setFullYear(r.getFullYear()+n);
break;
case 'Y-1D':
case 'YEAR-1DAY':
case 'YEARS-1DAY':
r.setFullYear(r.getFullYear()+n);
if (n>=0)
r.setDate(r.getDate()-1);
else
r.setDate(r.getDate()+1);
break;
default:
r.setDate(r.getDate()+n);
}
return r;
}
return false;
}
После подключения этого кода возможно использование нового метода для любого объекта Date.
Например, так:
var d=new Date();
var d1,d2,d3;
d1=d.add(1,'month-1day');
d2=d.add(-18,'years');
d3=d.add(30,'days');
Не забудьте скачать и подключить всю библиотеку, так как метод Date.add() опирается на некоторые другие методы.
В моей практике на php были часто очень полезны функции начала и конца дня (выдающие таймстемп), ну и начало-конец недели, месяца и т.д.
Ну и с точки зрения стороннего программиста d2=d.add(-18,’years’); это круто, но вызывает когнитивный диссонанс. Я бы предпочел substract, вместо add отрицательное число.