#! /bin/false
$Qgoda::Util::Date::VERSION
=
'0.9.8'
;
'""'
=>
'epoch'
,
'eq'
=>
'equals'
,
'cmp'
=>
'cmpDate'
,
'=='
=>
'nequals'
,
'<=>'
=>
'ncmpDate'
;
sub
new {
my
(
$class
,
$date
) =
@_
;
my
$date
= str2time
$date
;
$date
||= 0;
bless
\
$date
,
$class
;
}
sub
newFromEpoch {
my
(
$class
,
$epoch
) =
@_
;
$epoch
=
time
if
!
defined
$epoch
;
my
$self
=
$epoch
;
bless
\
$self
,
$class
;
}
sub
epoch {
my
(
$self
) =
@_
;
return
$$self
;
}
sub
year {
my
(
$self
) =
@_
;
return
1900 + (
localtime
$$self
)[5]
}
sub
month {
my
(
$self
) =
@_
;
return
sprintf
'%02u'
, 1 + (
localtime
$$self
)[4]
}
sub
imonth {
my
(
$self
) =
@_
;
return
1 + (
localtime
$$self
)[4]
}
sub
mday {
my
(
$self
) =
@_
;
return
sprintf
'%02u'
, (
localtime
$$self
)[3]
}
sub
imday {
my
(
$self
) =
@_
;
return
(
localtime
$$self
)[3]
}
sub
day {
my
(
$self
) =
@_
;
return
sprintf
'%02u'
, (
localtime
$$self
)[3]
}
sub
iday {
my
(
$self
) =
@_
;
return
(
localtime
$$self
)[3]
}
sub
hour {
my
(
$self
) =
@_
;
return
sprintf
'%02u'
, (
localtime
$$self
)[2]
}
sub
ihour {
my
(
$self
) =
@_
;
return
(
localtime
$$self
)[2]
}
sub
hour12 {
my
(
$self
) =
@_
;
return
sprintf
'%02u'
, (
localtime
$$self
)[2] % 12;
}
sub
ihour12 {
my
(
$self
) =
@_
;
return
(
localtime
$$self
)[2] % 12;
}
sub
ampm {
my
(
$self
) =
@_
;
return
strftime
'%p'
,
localtime
$$self
;
}
sub
dst {
my
(
$self
) =
@_
;
return
(
localtime
$$self
)[8] ? __
"DST"
:
''
;
}
sub
wdayname {
my
(
$self
) =
@_
;
return
strftime
'%A'
,
localtime
$$self
;
}
sub
awdayname {
my
(
$self
) =
@_
;
return
strftime
'%a'
,
localtime
$$self
;
}
sub
monthname {
my
(
$self
) =
@_
;
return
strftime
'%B'
,
localtime
$$self
;
}
sub
amonthname {
my
(
$self
) =
@_
;
return
strftime
'%b'
,
localtime
$$self
;
}
sub
ISOString {
my
(
$self
) =
@_
;
my
@then
=
gmtime
$$self
;
return
sprintf
'%04u-%02u-%02uT%02u:%02u:%02u.000Z'
,
$then
[5] + 1900,
$then
[4] + 1,
$then
[3],
$then
[2],
$then
[1],
$then
[0]
}
sub
cmpDate {
my
(
$self
,
$other
,
$swap
) =
@_
;
my
$result
=
$self
->ISOString cmp
$other
;
$result
= -
$result
if
$swap
;
return
$result
;
}
sub
ncmpDate {
my
(
$self
,
$other
,
$swap
) =
@_
;
my
$result
=
$self
->epoch <=>
$other
;
$result
= -
$result
if
$swap
;
return
$result
;
}
sub
equals {
my
(
$self
,
$other
) =
@_
;
return
"$self"
eq
"$other"
;
}
sub
nequals {
my
(
$self
,
$other
) =
@_
;
return
$$self
==
$other
;
}
sub
rfc822 {
my
(
$self
) =
@_
;
my
@time
=
gmtime
$$self
;
my
@month_names
=
qw(Jan Feb Mar Apr May Jun
Jul Aug Sep Oct Nov Dec)
;
my
@day_names
=
qw(Sun Mon Tue Wed Thu Fri Sat Sun)
;
return
sprintf
(
'%s, %02u %s %04u %02u:%02u:%02u +0000'
,
$day_names
[
$time
[6]],
$time
[3],
$month_names
[
$time
[4]],
$time
[5] + 1900,
$time
[2],
$time
[1],
$time
[0]);
}
sub
rfc822Local {
my
(
$self
) =
@_
;
my
@time
=
localtime
$$self
;
my
$tz_offset
= (Time::Local::timegm(
@time
) -
$$self
) / 60;
my
$tz
=
sprintf
(
'%s%02u%02u'
,
$tz_offset
< 0 ?
'-'
:
'+'
,
$tz_offset
/ 60,
$tz_offset
% 60);
my
@month_names
=
qw(Jan Feb Mar Apr May Jun
Jul Aug Sep Oct Nov Dec)
;
my
@day_names
=
qw(Sun Mon Tue Wed Thu Fri Sat Sun)
;
return
sprintf
(
'%s, %02u %s %04u %02u:%02u:%02u %s'
,
$day_names
[
$time
[6]],
$time
[3],
$month_names
[
$time
[4]],
$time
[5] + 1900,
$time
[2],
$time
[1],
$time
[0],
$tz
);
}
sub
w3c {
my
(
$self
) =
@_
;
my
@time
=
gmtime
$$self
;
return
sprintf
(
'%04u-%02u-%02u'
,
$time
[5] + 1900,
$time
[4] + 1,
$time
[3]);
}
sub
w3cLocal {
my
(
$self
,
$short
) =
@_
;
my
@time
=
localtime
$$self
;
return
sprintf
(
'%04u-%02u-%02u'
,
$time
[5] + 1900,
$time
[4] + 1,
$time
[3]);
}
sub
w3cWithTime {
my
(
$self
) =
@_
;
my
@time
=
gmtime
$$self
;
return
sprintf
(
'%04u-%02u-%02uT%02u:%02u:%02u+0000'
,
$time
[5] + 1900,
$time
[4] + 1,
$time
[3],
$time
[2],
$time
[1],
$time
[0]);
}
sub
w3cWithTimeLocal {
my
(
$self
,
$short
) =
@_
;
my
@time
=
localtime
$$self
;
my
$tz_offset
= (Time::Local::timegm(
@time
) -
$$self
) / 60;
my
$tz
=
sprintf
(
'%s%02u%02u'
,
$tz_offset
< 0 ?
'-'
:
'+'
,
$tz_offset
/ 60,
$tz_offset
% 60);
return
sprintf
(
'%04u-%02u-%02uT%02u:%02u:%02u%s'
,
$time
[5] + 1900,
$time
[4] + 1,
$time
[3],
$time
[2],
$time
[1],
$time
[0],
$tz
);
}
sub
TO_JSON {
my
(
$self
) =
@_
;
return
$self
->ISOString;
}
1;