Dt add
Материал из Eludia.
Описание
Прибавляет к заданной дате нужный интервал.
Дата может быть задана в виде любой строки, воспринимаемой процедурой dt_y_m_d: в частности, подходят форматы YYYY-MM-DD и ДД.ММ.ГГГГ. Строка может оканчиваться на триплет часы-минуты-секунды в формате 'hh:mm:ss'.
Интервал имеет формат
число число ... число [вид]
"Число" — это целое (возможно, отрицательное) число.
"Вид" — это один из постфиксов процедур Add_Delta_... из модуля Date::Calc, а именно:
- Days
- дни (принимается по умолчанию);
- YM
- годы и месяцы;
- YMD
- годы, месяцы и дни;
- DHMS
- дни, часы, минуты и секунды;
- YMDHMS
- годы, месяцы, дни, часы, минуты и секунды.
Кроме того, можно использовать буквы H, M и S для часов, минут и секунд соответственно — они работают так же, как DHMS, однако требуют всего одного аргумента (остальные нули подставляются автоматически).
Данный параметр может также содержать модификатор '24': например, '+1 H24'. Если он указан, то граница суток (полночь) в результате относится к оконченным суткам и изображается как '24:00:00'. По умолчанию же она относится к наступающим суткам и пишется как '00:00:00'.
Вычисления осуществляются посредством вызова процедуры Add_Delta_..., которой передаётся результат dt_y_m_d и интервал, нарезанный по пробельным символам.
Результат процедуры зависит от контекста вызова и формата входной даты.
Если второй операнд так или иначе касался часов, минут и секунд, то результат будет содержать соответствующую часть, иначе — нет.
Если функция вызывается в списочном контексте, то возвращается массив ($Y, $M, $D) или ($Y, $M, $D, $h, $m, $s).
Иначе, если 1-й параметр имел вид 'YYYY-MM-DD', то возвращается дата в формате 'YYYY-MM-DD' или 'YYYY-MM-DD hh:mm:ss';
В противном случае возвращается дата в формате 'ДД.ММ.ГГГГ' (dt_dmy) или 'ДД.ММ.ГГГГ чч:мм:сс'.
Синопсис (Perl 5)
my $dt = dt_add ('2009-07-31', 1 ); # '2009-08-01'
my $dt = dt_add ('31.07.2009', -1 ); # '30.07.2009'
my @dt = dt_add ('31.07.2009', '0 1 YM'); # (2008, 08, 31)
my $dt = dt_add ('03.09.2009', '0 H24' ); # '02.09.2009 24:00:00'
