| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Hub::Misc::Time; |
|
2
|
1
|
|
|
1
|
|
6
|
use strict; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
42
|
|
|
3
|
1
|
|
|
1
|
|
6
|
use Hub qw/:lib/; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
5
|
|
|
4
|
|
|
|
|
|
|
our $VERSION = '4.00043'; |
|
5
|
|
|
|
|
|
|
our @EXPORT = qw//; |
|
6
|
|
|
|
|
|
|
our @EXPORT_OK = qw/ |
|
7
|
|
|
|
|
|
|
datetime |
|
8
|
|
|
|
|
|
|
dhms |
|
9
|
|
|
|
|
|
|
/; |
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
our @MONTH_NAMES = ( |
|
12
|
|
|
|
|
|
|
"January", |
|
13
|
|
|
|
|
|
|
"February", |
|
14
|
|
|
|
|
|
|
"March", |
|
15
|
|
|
|
|
|
|
"April", |
|
16
|
|
|
|
|
|
|
"May", |
|
17
|
|
|
|
|
|
|
"June", |
|
18
|
|
|
|
|
|
|
"July", |
|
19
|
|
|
|
|
|
|
"August", |
|
20
|
|
|
|
|
|
|
"September", |
|
21
|
|
|
|
|
|
|
"October", |
|
22
|
|
|
|
|
|
|
"November", |
|
23
|
|
|
|
|
|
|
"December" |
|
24
|
|
|
|
|
|
|
); |
|
25
|
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
our @MONTH_ABBRS = ( |
|
27
|
|
|
|
|
|
|
"Jan", |
|
28
|
|
|
|
|
|
|
"Feb", |
|
29
|
|
|
|
|
|
|
"Mar", |
|
30
|
|
|
|
|
|
|
"Apr", |
|
31
|
|
|
|
|
|
|
"May", |
|
32
|
|
|
|
|
|
|
"Jun", |
|
33
|
|
|
|
|
|
|
"Jul", |
|
34
|
|
|
|
|
|
|
"Aug", |
|
35
|
|
|
|
|
|
|
"Sep", |
|
36
|
|
|
|
|
|
|
"Oct", |
|
37
|
|
|
|
|
|
|
"Nov", |
|
38
|
|
|
|
|
|
|
"Dec" |
|
39
|
|
|
|
|
|
|
); |
|
40
|
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
our @DAY_NAMES = ( |
|
42
|
|
|
|
|
|
|
"Sunday", |
|
43
|
|
|
|
|
|
|
"Monday", |
|
44
|
|
|
|
|
|
|
"Tueday", |
|
45
|
|
|
|
|
|
|
"Wednesday", |
|
46
|
|
|
|
|
|
|
"Thursday", |
|
47
|
|
|
|
|
|
|
"Friday", |
|
48
|
|
|
|
|
|
|
"Saturday" |
|
49
|
|
|
|
|
|
|
); |
|
50
|
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
our @DAY_ABBRS = ( |
|
52
|
|
|
|
|
|
|
"Sun", |
|
53
|
|
|
|
|
|
|
"Mon", |
|
54
|
|
|
|
|
|
|
"Tue", |
|
55
|
|
|
|
|
|
|
"Wed", |
|
56
|
|
|
|
|
|
|
"Thr", |
|
57
|
|
|
|
|
|
|
"Fri", |
|
58
|
|
|
|
|
|
|
"Sat" |
|
59
|
|
|
|
|
|
|
); |
|
60
|
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------ |
|
62
|
|
|
|
|
|
|
# datetime - Friendly date-time formats of seconds-since-the-epoch timestamps. |
|
63
|
|
|
|
|
|
|
# datetime [$timestamp], [options] |
|
64
|
|
|
|
|
|
|
# |
|
65
|
|
|
|
|
|
|
# Default is the current time formatted as: MM/DD/YYYY hh:mm:ss. |
|
66
|
|
|
|
|
|
|
# The decimal portion of HiRest time is truncated. |
|
67
|
|
|
|
|
|
|
# Uses `localtime` to localize. |
|
68
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------ |
|
69
|
|
|
|
|
|
|
#|test(true) datetime( ); |
|
70
|
|
|
|
|
|
|
#|test(regex,02\/..\/2003 ..:..:24) datetime( 1045837284 ); |
|
71
|
|
|
|
|
|
|
#|test(regex,02\/..\/2003 ..:..) datetime( 1045837284, -nosec ); |
|
72
|
|
|
|
|
|
|
#|test(regex,02\/.. ..:..:24) datetime( 1045837284, -noyear ); |
|
73
|
|
|
|
|
|
|
#|test(regex,02\/..\/2003 ..:..:24am) datetime( 1045837284, -ampm ); |
|
74
|
|
|
|
|
|
|
#|test(regex,2\/..\/2003 .:..:24) datetime( 1045837284, -nozeros ); |
|
75
|
|
|
|
|
|
|
#|test(regex,02\/..\/2003) datetime( 1045837284, -notime ); |
|
76
|
|
|
|
|
|
|
#|test(regex,..:..:24) datetime( 1045837284, -nodate ); |
|
77
|
|
|
|
|
|
|
#|test(regex,February .., 2003 ..:..:24) datetime( 1045837284, -letter ); |
|
78
|
|
|
|
|
|
|
# |
|
79
|
|
|
|
|
|
|
# Combining options |
|
80
|
|
|
|
|
|
|
# |
|
81
|
|
|
|
|
|
|
#|test(regex) datetime( 1045837284, -ampm, -nosec ); |
|
82
|
|
|
|
|
|
|
#~ 02\/..\/2003 ..:..am |
|
83
|
|
|
|
|
|
|
# |
|
84
|
|
|
|
|
|
|
#|test(regex) datetime( 1045837284, -nosec, -nozeros, -noyear ); |
|
85
|
|
|
|
|
|
|
#~ 2\/.. .:.. |
|
86
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------ |
|
87
|
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
sub datetime { |
|
89
|
0
|
|
|
0
|
1
|
|
my ($opts, $timestamp) = Hub::opts(\@_); |
|
90
|
0
|
|
0
|
|
|
|
$timestamp ||= time; |
|
91
|
|
|
|
|
|
|
# Get fields for requested time |
|
92
|
0
|
|
|
|
|
|
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = |
|
93
|
|
|
|
|
|
|
localtime($timestamp); |
|
94
|
|
|
|
|
|
|
# Aquire logical values |
|
95
|
0
|
|
|
|
|
|
my $ampm = ""; |
|
96
|
0
|
0
|
|
|
|
|
if( $$opts{'ampm'} ) { |
|
97
|
0
|
0
|
|
|
|
|
$ampm = $hour > 12 ? "pm" : "am"; |
|
98
|
0
|
0
|
|
|
|
|
$hour = $hour > 12 ? $hour - 12 : $hour; |
|
99
|
|
|
|
|
|
|
}#if |
|
100
|
0
|
0
|
|
|
|
|
my $digit_format = $$opts{'nozeros'} ? '%d' : '%02d'; |
|
101
|
0
|
|
|
|
|
|
my $props = { |
|
102
|
|
|
|
|
|
|
day => sprintf( $digit_format, $mday ), |
|
103
|
|
|
|
|
|
|
month => sprintf( $digit_format, $mon+1 ), |
|
104
|
|
|
|
|
|
|
year => $year + 1900, |
|
105
|
|
|
|
|
|
|
hour => sprintf( $digit_format, $hour ), |
|
106
|
|
|
|
|
|
|
minute => sprintf( '%02d', $min ), |
|
107
|
|
|
|
|
|
|
second => sprintf( '%02d', $sec ), |
|
108
|
|
|
|
|
|
|
ampm => $ampm, |
|
109
|
|
|
|
|
|
|
}; |
|
110
|
0
|
|
|
|
|
|
my $names = { |
|
111
|
|
|
|
|
|
|
MONTH => $MONTH_NAMES[$mon], |
|
112
|
|
|
|
|
|
|
MM => $MONTH_ABBRS[$mon], |
|
113
|
|
|
|
|
|
|
DAY => $DAY_NAMES[$wday], |
|
114
|
|
|
|
|
|
|
DD => $DAY_ABBRS[$wday], |
|
115
|
|
|
|
|
|
|
}; |
|
116
|
|
|
|
|
|
|
# Default formats |
|
117
|
0
|
|
|
|
|
|
my $date = "[#month]/[#day]/[#year]"; |
|
118
|
0
|
|
|
|
|
|
my $time = "[#hour]:[#minute]:[#second][#ampm]"; |
|
119
|
|
|
|
|
|
|
# Apply formatting options |
|
120
|
0
|
0
|
|
|
|
|
$$opts{'nosec'} and $time = "[#hour]:[#minute][#ampm]"; |
|
121
|
0
|
0
|
|
|
|
|
$$opts{'noyear'} and $date = "[#month]/[#day]"; |
|
122
|
0
|
0
|
|
|
|
|
$$opts{'letter'} and $date = "[#MONTH] [#day], [#year]"; |
|
123
|
0
|
0
|
|
|
|
|
$$opts{'mysql'} and $date = "[#year]-[#month]-[#day]"; |
|
124
|
0
|
|
|
|
|
|
my $format = "$date $time"; |
|
125
|
0
|
0
|
|
|
|
|
$$opts{'apache'} and $format = |
|
126
|
|
|
|
|
|
|
"[#DD] [#MM] [#day] [#hour]:[#minute]:[#second] [#year]"; |
|
127
|
0
|
0
|
|
|
|
|
$$opts{'notime'} and $format = $date; |
|
128
|
0
|
0
|
|
|
|
|
$$opts{'nodate'} and $format = $time; |
|
129
|
|
|
|
|
|
|
# Populate template format with data and time |
|
130
|
0
|
|
|
|
|
|
return Hub::populate(\$format, $props, $names); |
|
131
|
|
|
|
|
|
|
}#dateTime |
|
132
|
|
|
|
|
|
|
|
|
133
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------ |
|
134
|
|
|
|
|
|
|
# Hub::dhms( $seconds, $options, $format ) |
|
135
|
|
|
|
|
|
|
# |
|
136
|
|
|
|
|
|
|
# Format the provided number of seconds in days, hours, minutes, and seconds. |
|
137
|
|
|
|
|
|
|
# |
|
138
|
|
|
|
|
|
|
# Examples: Returns: |
|
139
|
|
|
|
|
|
|
# ------------------------------------------------------- -------------------- |
|
140
|
|
|
|
|
|
|
# Hub::dhms( 10 ) 00d:00h:00m:10s |
|
141
|
|
|
|
|
|
|
# Hub::dhms( 60 ) 00d:00h:01m:00s |
|
142
|
|
|
|
|
|
|
# Hub::dhms( 3600 ) 00d:01h:00m:00s |
|
143
|
|
|
|
|
|
|
# Hub::dhms( 86400 ) 01d:00h:00m:00s |
|
144
|
|
|
|
|
|
|
# Hub::dhms( 11 ) 00d:00h:00m:11s |
|
145
|
|
|
|
|
|
|
# Hub::dhms( 71 ) 00d:00h:01m:11s |
|
146
|
|
|
|
|
|
|
# Hub::dhms( 3671 ) 00d:01h:01m:11s |
|
147
|
|
|
|
|
|
|
# Hub::dhms( 90071 ) 01d:01h:01m:11s |
|
148
|
|
|
|
|
|
|
# Hub::dhms( 90071, "--nozeros" ) 1d:1h:1m:11s |
|
149
|
|
|
|
|
|
|
# Hub::dhms( 90071, "--nozeros" ) 1d:1h:1m:11s |
|
150
|
|
|
|
|
|
|
# Hub::dhms( 90071, "--nozeros", "[#d]days [#h]:[#m]:[#s]" ) 1days 1:1:11 |
|
151
|
|
|
|
|
|
|
# Hub::dhms( 90071, "[#d]days [#h]:[#m]:[#s]" ) 01days 01:01:11 |
|
152
|
|
|
|
|
|
|
# |
|
153
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------ |
|
154
|
|
|
|
|
|
|
sub dhms { |
|
155
|
0
|
|
|
0
|
1
|
|
my ($seconds,$options,$format) = @_; |
|
156
|
0
|
0
|
|
|
|
|
return unless $seconds; |
|
157
|
0
|
0
|
|
|
|
|
unless( $format ) { |
|
158
|
0
|
0
|
|
|
|
|
$format = $options unless $options =~ /--/; |
|
159
|
|
|
|
|
|
|
} |
|
160
|
0
|
|
|
|
|
|
my $digit_format = "%02d"; |
|
161
|
0
|
0
|
|
|
|
|
$options =~ /nozeros/ and $digit_format = "%d"; |
|
162
|
0
|
0
|
|
|
|
|
$options =~ /MS/ and $format = "[#m]m:[#s]s"; |
|
163
|
0
|
0
|
|
|
|
|
$options =~ /HMS/ and $format = "[#h]h:[#m]m:[#s]s"; |
|
164
|
0
|
|
0
|
|
|
|
$format ||= "[#d]d:[#h]h:[#m]m:[#s]s"; |
|
165
|
0
|
|
|
|
|
|
my $dhms = { |
|
166
|
|
|
|
|
|
|
d => 0, |
|
167
|
|
|
|
|
|
|
h => 0, |
|
168
|
|
|
|
|
|
|
m => 0, |
|
169
|
|
|
|
|
|
|
s => 0, |
|
170
|
|
|
|
|
|
|
}; |
|
171
|
0
|
|
|
|
|
|
$$dhms{'d'} = sprintf( $digit_format, int($seconds/86400) ); |
|
172
|
0
|
|
|
|
|
|
$seconds -= ($$dhms{'d'} * 86400); |
|
173
|
0
|
|
|
|
|
|
$$dhms{'h'} = sprintf( $digit_format, int($seconds/3600) ); |
|
174
|
0
|
|
|
|
|
|
$seconds -= ($$dhms{'h'} * 3600); |
|
175
|
0
|
|
|
|
|
|
$$dhms{'m'} = sprintf( $digit_format, int($seconds/60) ); |
|
176
|
0
|
|
|
|
|
|
$seconds -= ($$dhms{'m'} * 60); |
|
177
|
0
|
|
|
|
|
|
$$dhms{'s'} = sprintf( "%02d", $seconds ); # sec don't acknowledge 'nozeros' |
|
178
|
0
|
|
|
|
|
|
return Hub::populate( \$format, $dhms ); |
|
179
|
|
|
|
|
|
|
}#dhms |
|
180
|
|
|
|
|
|
|
|
|
181
|
|
|
|
|
|
|
# ------------------------------------------------------- -------------------- |
|
182
|
|
|
|
|
|
|
1; |