Why not adopt me?
Name
qbit::Array - Functions to manipulate dates.
Functions
trdate
Arguments:
$iformat - string, input format;
$oformat - string, output format. One of:
norm - array ref, ['year', 'month (1-12)', 'day (1-31)', 'hour (0-23)', 'minute (0-59)', 'second (0-59)'];
db_time - string, 'YYYY-MM-DD hh:mm:ss';
sec - number, seconds like in
localtime
;days_in_month - number, days in month. Cannot convert from this type to other.
$date - scalar, date in input format.
Return value: scalar, date in output format. undef
if conversion has errors.
Convert date from iformat
to oformat
.
trdate(db => sec => '2000-01-01');
curdate
Arguments as hash:
oformat - string, output format, see "trdate".
Return value: scalar, current date in output format.
curdate(oformat => 'db');
date_add
Arguments:
$date - scalar, date;
%opts - hash, additional arguments:
iformat - string, input format, default - 'norm';
oformat - string, output format, default - 'norm';
second - number, quantity of seconds to add;
minute - number, quantity of minutes to add;
hour - number, quantity of hours to add;
day - number, quantity of days to add;
week - number, quantity of weeks to add;
month - number, quantity of months to add;
year - number, quantity of years to add;
Return value: scalar, date in output format.
date_add('2000-01-01', day => 12, hour => 5, iformat => 'db', oformat => 'db');
date_sub
See "date_add"
name2date
Arguments:
$name - string, date caption. Available values:
lastyesterday
lasttoday
daybeforeyesterday
yesterday
today or day
tomorrow
dayaftertomorrow;
%opts - hash, additional arguments:
oformat: string, output format, default - 'norm'.
Return value: scalar, date in output format. undef
unless known name.
name2date('yesterday', oformat => 'db');
name2dates
Arguments:
$name - string, period caption. One of:
Any from "name2date";
week, sevendays, last7days: last 7 days, including today;
thisweek: current week, from Monday to today;
lastweek, pastweek: past week, from Monday to Sunday;
tendays: last 10 days, including today;
lastmonth, pastmonth: past month, from 1th to (28|29|30|31)th;
month: current month, from 1th to (28|29|30|31)th;
thismonth: current month, from 1th to today;
year, thisyear: current year, from January 1th to December 31th;
{N}days: last {N} days, including today, {N} - numer, quantity of days;
pastpastweek: week before past week, from Monday to Sunday;
past{N}days: last {N} days before {N} days, {N} - number of days;
pastpastmonth: month before past month, from 1th to (28|29|30|31)th;
pastyear: past year, from January 1th to December 31th;
twoyearsago: year before past year, from January 1th to December 31th;
$fd - scalar, start date. Return if unknown period name;
$td - scalar, end date. Return if unknown period name;
%opts - hash, additional arguments:
iformat: string, input format for
$fd
and$td
, default - 'norm';oformat: string, output format, default - 'norm'.
Return value: array, (start_date, end_date).
($fd, $td) = name2date('pastyear', [], [], oformat => 'db'); # ('2012-01-01', '2012-12-31')
($fd, $td) = name2date('other', '2000-01-01', '2000-01-03', iformat => 'db', oformat => 'db'); # ('2000-01-01', '2000-01-03')
dates2array
Arguments:
$fd - scalar, start date;
$td - scalar, end date;
%opts - hash, additional arguments:
iformat: string, input format, default - 'norm';
oformat: string, output format, default - 'norm';
interval: string, step size: day, week, month, year. Default day.
Return value: array of scalars.
my @dates = dates2array('2001-01-01', '2001-01-04', iformat => 'db', oformat => 'db');
dates_delta
Arguments:
$fd - scalar, start date;
$td - scalar, end date;
%opts - hash, additional arguments:
iformat: string, input format, default - 'norm'.
Return value: array ref, [years, months, days, hours, minutes, seconds].
dates_delta_days
Arguments: See "dates_delta"
Return value: number, days from $fd
to $td
.
compare_dates
Arguments:
$dt1 - scalar, first date;
$dt2 - scalar, second date;
%opts - hash, additional arguments:
iformat1: string, input format for first date, default - 'norm'.
iformat2: string, input format for second date, default - 'norm'.
Return value:
-1:
$dt1 < $dt2
;0:
$dt1 = $dt2
;1:
$dt1 > $dt2
.
compare_dates($dt1, $dt2, iformat1 => 'db', iformat2 => 'norm')
format_date
Arguments:
$date - scalar, date;
$format - string, output format;
%opts - hash, additional arguments:
iformat: string, input format for date, default - 'norm'.
Formaters:
%a Abbreviated weekday name Thu
%A Full weekday name Thursday
%b Abbreviated month name Aug
%B Full month name August
%c Date and time representation Thu Aug 23 14:55:02 2001
%d Day of the month (01-31) 23
%H Hour in 24h format (00-23) 14
%I Hour in 12h format (01-12) 02
%j Day of the year (001-366) 235
%m Month as a decimal number (01-12) 08
%M Minute (00-59) 55
%p AM or PM designation PM
%S Second (00-61) 02
%U Week number with the first Sunday as the first day of week one (00-53) 33
%w Weekday as a decimal number with Sunday as 0 (0-6) 4
%W Week number with the first Monday as the first day of week one (00-53) 34
%x Date representation 08/23/01
%X Time representation 14:55:02
%y Year, last two digits (00-99) 01
%Y Year 2001
%Z Timezone name or abbreviation CDT
%% A % sign %
Return value: string
format_date('2001-01-01', '%Y %B', iformat => 'db');
is_date_in_future
Arguments:
$date - scalar, date;
%opts - hash, additional arguments:
iformat: string, input format for date, default - 'norm'.
Return value: boolean.
is_date_in_future($date, iformat => 'db')
is_date_in_past
check_date
Arguments:
$date - scalar, date;
%opts - hash, additional arguments:
Return value: boolean.
check_date($date, iformat => 'db');
Extending trdate
local $qbit::Date::TR_HS{'new_type'} = {
'>' => sub {my $dt_norm = shift; ...Convert $dt_norm to new_type code...},
'<' => sub {my $dt_new_type = shift; ...Convert $dt_new_type to norm code...};
};