§8. "Датская" :-) африметика или Арифметика дат

Приветствую!

Сегодня научимся прибавлять определенное количество дней, месяцев и лет к датам. Иногда эта возможность бывает очень кстати.

Задавая отрицательное значение 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');
Запись опубликована в рубрике JavaScript с метками , . Добавьте в закладки постоянную ссылку.

1 комментарий: §8. "Датская" :-) африметика или Арифметика дат

  1. Вольберг говорит:

    В моей практике на php были часто очень полезны функции начала и конца дня (выдающие таймстемп), ну и начало-конец недели, месяца и т.д.

    Ну и с точки зрения стороннего программиста d2=d.add(-18,’years’); это круто, но вызывает когнитивный диссонанс. Я бы предпочел substract, вместо add отрицательное число.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>