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...};
};