| blib/lib/Date/Fmtstr2time.pm | |||
|---|---|---|---|
| Criterion | Covered | Total | % |
| statement | 12 | 198 | 6.0 |
| branch | 0 | 68 | 0.0 |
| condition | 0 | 30 | 0.0 |
| subroutine | 4 | 53 | 7.5 |
| pod | 1 | 1 | 100.0 |
| total | 17 | 350 | 4.8 |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | =head1 NAME | ||||||
| 2 | |||||||
| 3 | Date::Fmtstr2time - Functions to format date/time strings into a Perl Time based on a "Picture" format string. | ||||||
| 4 | |||||||
| 5 | =head1 AUTHOR | ||||||
| 6 | |||||||
| 7 | Jim Turner | ||||||
| 8 | |||||||
| 9 | (c) 2015, Jim Turner under the same license that Perl 5 itself is. All rights reserved. | ||||||
| 10 | |||||||
| 11 | =head1 SYNOPSIS | ||||||
| 12 | |||||||
| 13 | use Date::Fmtstr2time; | ||||||
| 14 | |||||||
| 15 | print str2time('12-25-2015 07:15 AM', 'mm-dd-yyyy hh:mi PM'); | ||||||
| 16 | |||||||
| 17 | =head1 DESCRIPTION | ||||||
| 18 | |||||||
| 19 | Date::Fmtstr2time provides a single function B |
||||||
| 20 | in a string (I |
||||||
| 21 | the various parts of a date and time value. It returns a standard Perl (Unix) "time" value (a | ||||||
| 22 | large integer equivalent to the number of seconds since 1980). | ||||||
| 23 | |||||||
| 24 | =head1 METHODS | ||||||
| 25 | |||||||
| 26 | =over 4 | ||||||
| 27 | |||||||
| 28 | =item <$integer> = B |
||||||
| 29 | |||||||
| 30 | Returns a standard Perl (Unix) "time" value (a large integer). The I |
||||||
| 31 | the software what format to expect the date / time value in the I |
||||||
| 32 | |||||||
| 33 | For example: | ||||||
| 34 | |||||||
| 35 | $s = B |
||||||
| 36 | |||||||
| 37 | would set $s to 1452324000, (the Unix time equivalent). | ||||||
| 38 | |||||||
| 39 | =item B |
||||||
| 40 | |||||||
| 41 | There are numerous choices of special format substrings which can be used in an infinite | ||||||
| 42 | number of combinations to produce the desired results. They are listed below: | ||||||
| 43 | |||||||
| 44 | =over 4 | ||||||
| 45 | |||||||
| 46 | B |
||||||
| 47 | |||||||
| 48 | B |
||||||
| 49 | |||||||
| 50 | B |
||||||
| 51 | |||||||
| 52 | B |
||||||
| 53 | |||||||
| 54 | B |
||||||
| 55 | |||||||
| 56 | B |
||||||
| 57 | |||||||
| 58 | B |
||||||
| 59 | |||||||
| 60 | B |
||||||
| 61 | |||||||
| 62 | B |
||||||
| 63 | |||||||
| 64 | B |
||||||
| 65 | |||||||
| 66 | B |
||||||
| 67 | |||||||
| 68 | B |
||||||
| 69 | |||||||
| 70 | B |
||||||
| 71 | |||||||
| 72 | B |
||||||
| 73 | |||||||
| 74 | B |
||||||
| 75 | |||||||
| 76 | B |
||||||
| 77 | |||||||
| 78 | B |
||||||
| 79 | |||||||
| 80 | B |
||||||
| 81 | |||||||
| 82 | B |
||||||
| 83 | |||||||
| 84 | B- Hour in common format, 1 or 2 digits, as needed, ie. 1-12. |
||||||
| 85 | |||||||
| 86 | B |
||||||
| 87 | |||||||
| 88 | B |
||||||
| 89 | |||||||
| 90 | B |
||||||
| 91 | |||||||
| 92 | B |
||||||
| 93 | |||||||
| 94 | B- Hour in 24-hour format, 1 or 2 digits, as needed, ie. 0-23. |
||||||
| 95 | |||||||
| 96 | B |
||||||
| 97 | |||||||
| 98 | B |
||||||
| 99 | |||||||
| 100 | B |
||||||
| 101 | |||||||
| 102 | B |
||||||
| 103 | |||||||
| 104 | B |
||||||
| 105 | |||||||
| 106 | B |
||||||
| 107 | |||||||
| 108 | B |
||||||
| 109 | |||||||
| 110 | B, B - display "a" if between Midnight and Noon, "p" otherwise (both specifiers are identical). |
||||||
| 111 | |||||||
| 112 | B, B - display "A" if between Midnight and Noon, "P" otherwise (both specifiers are identical). |
||||||
| 113 | |||||||
| 114 | B |
||||||
| 115 | |||||||
| 116 | B |
||||||
| 117 | |||||||
| 118 | B |
||||||
| 119 | |||||||
| 120 | B- Number of the quarter of the year - (1-4). |
||||||
| 121 | |||||||
| 122 | =back | ||||||
| 123 | |||||||
| 124 | =back | ||||||
| 125 | |||||||
| 126 | =head1 KEYWORDS | ||||||
| 127 | |||||||
| 128 | L |
||||||
| 129 | |||||||
| 130 | =cut | ||||||
| 131 | |||||||
| 132 | package Date::Fmtstr2time; | ||||||
| 133 | |||||||
| 134 | 1 | 1 | 20721 | use strict; | |||
| 1 | 2 | ||||||
| 1 | 28 | ||||||
| 135 | #use warnings; | ||||||
| 136 | 1 | 1 | 5 | use vars qw(@ISA @EXPORT $VERSION); | |||
| 1 | 1 | ||||||
| 1 | 65 | ||||||
| 137 | $VERSION = '1.00'; | ||||||
| 138 | |||||||
| 139 | 1 | 1 | 1526 | use Time::Local; | |||
| 1 | 1638 | ||||||
| 1 | 294 | ||||||
| 140 | |||||||
| 141 | require Exporter; | ||||||
| 142 | |||||||
| 143 | @ISA = qw(Exporter); | ||||||
| 144 | @EXPORT = qw(str2time); | ||||||
| 145 | |||||||
| 146 | my @inputs = (); | ||||||
| 147 | my @today = ();; | ||||||
| 148 | my $rtnTime = ''; | ||||||
| 149 | my @tl = (); | ||||||
| 150 | my $begofyear; | ||||||
| 151 | my %mthhash = ( | ||||||
| 152 | 'january' => '0', | ||||||
| 153 | 'february' => 1, | ||||||
| 154 | 'march' => 2, | ||||||
| 155 | 'april' => 3, | ||||||
| 156 | 'may' => 4, | ||||||
| 157 | 'june' => 5, | ||||||
| 158 | 'july' => 6, | ||||||
| 159 | 'august' => 7, | ||||||
| 160 | 'september' => 8, | ||||||
| 161 | 'october' => 9, | ||||||
| 162 | 'november' => 10, | ||||||
| 163 | 'december' => 11 | ||||||
| 164 | ); | ||||||
| 165 | |||||||
| 166 | sub str2time | ||||||
| 167 | { | ||||||
| 168 | 0 | 0 | 1 | my ($s) = $_[0]; | |||
| 169 | 0 | my ($f) = $_[1]; | |||||
| 170 | |||||||
| 171 | 0 | my @fmts = split(/\b/o, $f); | |||||
| 172 | 0 | @inputs = split(/\b/o, $s); | |||||
| 173 | 0 | @today = localtime(time); | |||||
| 174 | 0 | my $err = ''; | |||||
| 175 | 0 | $rtnTime = ''; | |||||
| 176 | 0 | @tl = (); | |||||
| 177 | 0 | $begofyear = timelocal(0,0,0,1,0,$today[5]); | |||||
| 178 | |||||||
| 179 | 0 | my $fn; | |||||
| 180 | 0 | for (my $i=0;$i<=$#fmts;$i++) | |||||
| 181 | { | ||||||
| 182 | 0 | foreach my $f (qw(month Month MONTH dayofweek Dayofweek DAYOFWEEK day Day DAY ddd | |||||
| 183 | ddmm dd d1 d0 mmddyyyy yyyymmdd yyyymm yymmdd mmyyyy mmddyy yyyy yymm mmyy yy hh24 hh | ||||||
| 184 | HH h1 H1 mi mm mon Mon MON m1 sssss ss am pm AM PM a p A P rm RM rr d ww q)) | ||||||
| 185 | { | ||||||
| 186 | 0 | 0 | if ($fmts[$i] =~ /^$f/i) | ||||
| 187 | { | ||||||
| 188 | 0 | $fn = '_tod_'.$f; | |||||
| 189 | 1 | 1 | 6 | no strict 'refs'; | |||
| 1 | 1 | ||||||
| 1 | 2945 | ||||||
| 190 | 0 | $err .= &$fn($i); | |||||
| 191 | 0 | last; | |||||
| 192 | } | ||||||
| 193 | } | ||||||
| 194 | } | ||||||
| 195 | 0 | 0 | $tl[3] = '1' unless ($tl[3]); | ||||
| 196 | 0 | my $rt = timelocal(@tl); | |||||
| 197 | |||||||
| 198 | 0 | 0 | return ($#tl >= 5) ? timelocal(@tl) : $rtnTime; | ||||
| 199 | } | ||||||
| 200 | |||||||
| 201 | sub _tod_month | ||||||
| 202 | { | ||||||
| 203 | 0 | 0 | my $indx = shift; | ||||
| 204 | 0 | $inputs[$indx] =~ tr/A-Z/a-z/; | |||||
| 205 | 0 | $tl[4] = $mthhash{$inputs[$indx]}; | |||||
| 206 | 0 | 0 | return "Invalid Month ($inputs[$indx])! " unless (length($tl[4])); | ||||
| 207 | 0 | return ''; | |||||
| 208 | } | ||||||
| 209 | |||||||
| 210 | sub _tod_mon | ||||||
| 211 | { | ||||||
| 212 | 0 | 0 | my %mthhash = ( | ||||
| 213 | 'jan' => '0', | ||||||
| 214 | 'feb' => 1, | ||||||
| 215 | 'mar' => 2, | ||||||
| 216 | 'apr' => 3, | ||||||
| 217 | 'may' => 4, | ||||||
| 218 | 'jun' => 5, | ||||||
| 219 | 'jul' => 6, | ||||||
| 220 | 'aug' => 7, | ||||||
| 221 | 'sep' => 8, | ||||||
| 222 | 'oct' => 9, | ||||||
| 223 | 'nov' => 10, | ||||||
| 224 | 'dec' => 11 | ||||||
| 225 | ); | ||||||
| 226 | |||||||
| 227 | 0 | my $indx = shift; | |||||
| 228 | 0 | $inputs[$indx] =~ tr/A-Z/a-z/; | |||||
| 229 | 0 | $tl[4] = $mthhash{substr($inputs[$indx],0,3)}; | |||||
| 230 | 0 | 0 | return "Invalid Mth ($inputs[$indx])! " unless (length($tl[4])); | ||||
| 231 | 0 | return ''; | |||||
| 232 | } | ||||||
| 233 | |||||||
| 234 | sub _tod_rm | ||||||
| 235 | { | ||||||
| 236 | 0 | 0 | my $indx = shift; | ||||
| 237 | |||||||
| 238 | 0 | my %mthhash = ( | |||||
| 239 | 'i' => '0', | ||||||
| 240 | 'ii' => 1, | ||||||
| 241 | 'iii' => 2, | ||||||
| 242 | 'iv' => 3, | ||||||
| 243 | 'v' => 4, | ||||||
| 244 | 'vi' => 5, | ||||||
| 245 | 'vii' => 6, | ||||||
| 246 | 'viii' => 7, | ||||||
| 247 | 'ix' => 8, | ||||||
| 248 | 'x' => 9, | ||||||
| 249 | 'xi' => 10, | ||||||
| 250 | 'xii' => 11 | ||||||
| 251 | ); | ||||||
| 252 | |||||||
| 253 | 0 | $inputs[$indx] =~ tr/A-Z/a-z/; | |||||
| 254 | 0 | $tl[4] = $mthhash{$inputs[$indx]}; | |||||
| 255 | 0 | 0 | return "Invalid Roman Mth. ($inputs[$indx])! " unless (length($tl[4])); | ||||
| 256 | 0 | return ''; | |||||
| 257 | } | ||||||
| 258 | |||||||
| 259 | sub _tod_mm | ||||||
| 260 | { | ||||||
| 261 | 0 | 0 | my $indx = shift; | ||||
| 262 | 0 | $inputs[$indx] =~ s/^0//; | |||||
| 263 | 0 | 0 | 0 | return "Invalid month ($inputs[$indx])! " | |||
| 264 | unless ($inputs[$indx] > 0 && $inputs[$indx] <= 12); | ||||||
| 265 | 0 | $tl[4] = $inputs[$indx] - 1; | |||||
| 266 | 0 | return ''; | |||||
| 267 | } | ||||||
| 268 | |||||||
| 269 | sub _tod_m1 | ||||||
| 270 | { | ||||||
| 271 | 0 | 0 | return &_tod_mm(@_); | ||||
| 272 | } | ||||||
| 273 | |||||||
| 274 | sub _tod_yyyymmdd | ||||||
| 275 | { | ||||||
| 276 | 0 | 0 | my $indx = shift; | ||||
| 277 | 0 | $tl[5] = substr($inputs[$indx],0,4) - 1900; | |||||
| 278 | 0 | $tl[4] = substr($inputs[$indx],4,2) - 1; | |||||
| 279 | 0 | $tl[3] = substr($inputs[$indx],6,2); | |||||
| 280 | 0 | return ''; | |||||
| 281 | } | ||||||
| 282 | |||||||
| 283 | sub _tod_yyyymm | ||||||
| 284 | { | ||||||
| 285 | 0 | 0 | my $indx = shift; | ||||
| 286 | 0 | $tl[5] = substr($inputs[$indx],0,4) - 1900; | |||||
| 287 | 0 | $tl[4] = substr($inputs[$indx],4,2) - 1; | |||||
| 288 | 0 | return ''; | |||||
| 289 | } | ||||||
| 290 | |||||||
| 291 | sub _tod_yymmdd | ||||||
| 292 | { | ||||||
| 293 | 0 | 0 | my $indx = shift; | ||||
| 294 | 0 | &_tod_rr($indx); | |||||
| 295 | 0 | $tl[4] = substr($inputs[$indx],2,2) - 1; | |||||
| 296 | 0 | $tl[3] = substr($inputs[$indx],4,2); | |||||
| 297 | 0 | return ''; | |||||
| 298 | } | ||||||
| 299 | |||||||
| 300 | sub _tod_yymm | ||||||
| 301 | { | ||||||
| 302 | 0 | 0 | my $indx = shift; | ||||
| 303 | 0 | &_tod_rr($indx); | |||||
| 304 | 0 | $tl[4] = substr($inputs[$indx],2,2) - 1; | |||||
| 305 | 0 | return ''; | |||||
| 306 | } | ||||||
| 307 | |||||||
| 308 | sub _tod_mmyyyy | ||||||
| 309 | { | ||||||
| 310 | 0 | 0 | my $indx = shift; | ||||
| 311 | 0 | &_tod_mm($indx); | |||||
| 312 | 0 | $inputs[$indx] = substr($inputs[$indx],2,4); | |||||
| 313 | 0 | $tl[5] = substr($inputs[$indx],2,4) - 1900; | |||||
| 314 | 0 | return ''; | |||||
| 315 | } | ||||||
| 316 | |||||||
| 317 | sub _tod_mmyy | ||||||
| 318 | { | ||||||
| 319 | 0 | 0 | my $indx = shift; | ||||
| 320 | 0 | &_tod_mm($indx); | |||||
| 321 | 0 | $inputs[$indx] = substr($inputs[$indx],2,2); | |||||
| 322 | 0 | &_tod_rr; | |||||
| 323 | 0 | return ''; | |||||
| 324 | } | ||||||
| 325 | |||||||
| 326 | sub _tod_mmddyyyy | ||||||
| 327 | { | ||||||
| 328 | 0 | 0 | my $indx = shift; | ||||
| 329 | 0 | &_tod_mm($indx); | |||||
| 330 | 0 | $tl[3] = substr($inputs[$indx],2,2) - 1; | |||||
| 331 | 0 | $tl[5] = substr($inputs[$indx],4,4) - 1900; | |||||
| 332 | 0 | return ''; | |||||
| 333 | } | ||||||
| 334 | |||||||
| 335 | sub _tod_mmddyy | ||||||
| 336 | { | ||||||
| 337 | 0 | 0 | my $indx = shift; | ||||
| 338 | 0 | &_tod_mm($indx); | |||||
| 339 | 0 | $tl[3] = substr($inputs[$indx],2,2) - 1; | |||||
| 340 | 0 | $inputs[$indx] =~ substr($inputs[$indx],4,2); | |||||
| 341 | 0 | &_tod_rr($indx); | |||||
| 342 | 0 | return ''; | |||||
| 343 | } | ||||||
| 344 | |||||||
| 345 | sub _tod_mmdd | ||||||
| 346 | { | ||||||
| 347 | 0 | 0 | my $indx = shift; | ||||
| 348 | 0 | &_tod_mm($indx); | |||||
| 349 | 0 | $tl[3] = substr($inputs[$indx],2,2); | |||||
| 350 | 0 | return ''; | |||||
| 351 | } | ||||||
| 352 | |||||||
| 353 | sub _tod_ddmm | ||||||
| 354 | { | ||||||
| 355 | 0 | 0 | my $indx = shift; | ||||
| 356 | 0 | &_tod_dd($indx); | |||||
| 357 | 0 | $tl[4] = substr($inputs[$indx],2,2) - 1; | |||||
| 358 | 0 | return ''; | |||||
| 359 | } | ||||||
| 360 | |||||||
| 361 | sub _tod_yyyy | ||||||
| 362 | { | ||||||
| 363 | 0 | 0 | my $indx = shift; | ||||
| 364 | 0 | 0 | return "Invalid year ($inputs[$indx])! " | ||||
| 365 | unless ($inputs[$indx] =~ /^\d\d\d\d$/); | ||||||
| 366 | 0 | $tl[5] = $inputs[$indx] - 1900; | |||||
| 367 | 0 | return ''; | |||||
| 368 | } | ||||||
| 369 | |||||||
| 370 | sub _tod_yy | ||||||
| 371 | { | ||||||
| 372 | 0 | 0 | return &_tod_rr(shift); | ||||
| 373 | } | ||||||
| 374 | |||||||
| 375 | sub _tod_rr | ||||||
| 376 | { | ||||||
| 377 | 0 | 0 | my $indx = shift; | ||||
| 378 | 0 | 0 | return "Invalid year ($inputs[$indx])! " | ||||
| 379 | unless ($inputs[$indx] =~ /^\d\d$/); | ||||||
| 380 | 0 | 0 | if (($today[5] % 100) > 50) | ||||
| 381 | { | ||||||
| 382 | 0 | 0 | $inputs[$indx] += 100 if ($inputs[$indx] < 50); | ||||
| 383 | } | ||||||
| 384 | else | ||||||
| 385 | { | ||||||
| 386 | #$inputs[$indx] -= 100 if ($inputs[$indx] > 50); | ||||||
| 387 | 0 | 0 | $inputs[$indx] += 100 if ($inputs[$indx] < 50); | ||||
| 388 | } | ||||||
| 389 | 0 | $tl[5] = $inputs[$indx]; | |||||
| 390 | 0 | return ''; | |||||
| 391 | } | ||||||
| 392 | |||||||
| 393 | sub _tod_rrrr | ||||||
| 394 | { | ||||||
| 395 | 0 | 0 | my $indx = shift; | ||||
| 396 | 0 | 0 | return &_tod_rr($indx) if ($inputs[$indx] =~ /^\d\d?$/); | ||||
| 397 | 0 | 0 | return "Invalid year ($inputs[$indx])! " | ||||
| 398 | unless ($inputs[$indx] =~ /^\d\d\d\d?$/); | ||||||
| 399 | 0 | 0 | if (($today[5] % 100) > 50) | ||||
| 400 | { | ||||||
| 401 | 0 | 0 | $inputs[$indx] += 100 if (($inputs[$indx] % 100) < 50); | ||||
| 402 | } | ||||||
| 403 | else | ||||||
| 404 | { | ||||||
| 405 | #$inputs[$indx] -= 100 if (($inputs[$indx] % 100) > 50); | ||||||
| 406 | 0 | 0 | $inputs[$indx] += 100 if ($inputs[$indx] < 50); | ||||
| 407 | } | ||||||
| 408 | 0 | $tl[5] = $inputs[$indx] - 1900; | |||||
| 409 | 0 | return ''; | |||||
| 410 | } | ||||||
| 411 | |||||||
| 412 | sub _tod_ddd | ||||||
| 413 | { | ||||||
| 414 | 0 | 0 | my $indx = shift; | ||||
| 415 | 0 | $inputs[$indx] =~ s/^0+//; | |||||
| 416 | 0 | 0 | 0 | return "Invalid year-day ($inputs[$indx])! " | |||
| 417 | unless ($inputs[$indx] > 0 and $inputs[$indx] <= 366); | ||||||
| 418 | 0 | 0 | $rtnTime += $begofyear + (($inputs[$indx]*86400) - 86400) unless ($rtnTime > 86400); | ||||
| 419 | 0 | return ''; | |||||
| 420 | } | ||||||
| 421 | |||||||
| 422 | sub _tod_dd | ||||||
| 423 | { | ||||||
| 424 | 0 | 0 | my $indx = shift; | ||||
| 425 | 0 | 0 | 0 | return "Invalid day ($inputs[$indx])! " | |||
| 426 | unless ($inputs[$indx] > 0 and $inputs[$indx] <= 31); | ||||||
| 427 | 0 | $inputs[$indx] =~ s/^0//; | |||||
| 428 | 0 | $tl[3] = $inputs[$indx]; | |||||
| 429 | 0 | return ''; | |||||
| 430 | } | ||||||
| 431 | |||||||
| 432 | sub _tod_d1 | ||||||
| 433 | { | ||||||
| 434 | 0 | 0 | return &_tod_dd(@_); | ||||
| 435 | } | ||||||
| 436 | |||||||
| 437 | sub _tod_hh | ||||||
| 438 | { | ||||||
| 439 | 0 | 0 | my $indx = shift; | ||||
| 440 | 0 | 0 | 0 | return "Invalid hour ($inputs[$indx])! " | |||
| 441 | unless ($inputs[$indx] >= 0 and $inputs[$indx] < 24); | ||||||
| 442 | 0 | 0 | $tl[2] = $inputs[$indx] unless ($tl[2] =~ /\d/); | ||||
| 443 | 0 | 0 | $rtnTime += ($inputs[$indx] * 3600) if ($rtnTime); | ||||
| 444 | 0 | return ''; | |||||
| 445 | } | ||||||
| 446 | |||||||
| 447 | sub _tod_h1 | ||||||
| 448 | { | ||||||
| 449 | 0 | 0 | return &_tod_hh(@_); | ||||
| 450 | } | ||||||
| 451 | |||||||
| 452 | sub _tod_H1 | ||||||
| 453 | { | ||||||
| 454 | 0 | 0 | return &_tod_hh(@_); | ||||
| 455 | } | ||||||
| 456 | |||||||
| 457 | sub _tod_hh24 | ||||||
| 458 | { | ||||||
| 459 | 0 | 0 | my $indx = shift; | ||||
| 460 | 0 | 0 | 0 | return "Invalid 24-hr time ($inputs[$indx])! " | |||
| 0 | |||||||
| 461 | unless ($inputs[$indx] >= 0 and $inputs[$indx] <= 2400 | ||||||
| 462 | and ($inputs[$indx] % 100) < 60); | ||||||
| 463 | 0 | $tl[1] = ($inputs[$indx] % 100); | |||||
| 464 | 0 | $inputs[$indx] = int($inputs[$indx] / 100); | |||||
| 465 | 0 | 0 | 0 | return "Invalid 24-hr time ($inputs[$indx])! " | |||
| 466 | unless ($inputs[$indx] > 0 and $inputs[$indx] < 24); | ||||||
| 467 | 0 | $tl[2] = $inputs[$indx]; | |||||
| 468 | 0 | return ''; | |||||
| 469 | } | ||||||
| 470 | |||||||
| 471 | sub _tod_HH | ||||||
| 472 | { | ||||||
| 473 | 0 | 0 | my $indx = shift; | ||||
| 474 | 0 | return &_tod_hh($indx); | |||||
| 475 | } | ||||||
| 476 | |||||||
| 477 | sub _tod_a | ||||||
| 478 | { | ||||||
| 479 | 0 | 0 | my $indx = shift; | ||||
| 480 | 0 | 0 | if ($tl[2] < 12) | ||||
| 481 | { | ||||||
| 482 | 0 | 0 | $tl[2] += 12 if ($inputs[$indx] =~ /p/io); | ||||
| 483 | } | ||||||
| 484 | else | ||||||
| 485 | { | ||||||
| 486 | 0 | 0 | $tl[2] -= 12 if ($inputs[$indx] =~ /a/io); | ||||
| 487 | } | ||||||
| 488 | 0 | return ''; | |||||
| 489 | } | ||||||
| 490 | |||||||
| 491 | sub _tod_p | ||||||
| 492 | { | ||||||
| 493 | 0 | 0 | return &_tod_a; | ||||
| 494 | } | ||||||
| 495 | |||||||
| 496 | sub _tod_A | ||||||
| 497 | { | ||||||
| 498 | 0 | 0 | return &_tod_a; | ||||
| 499 | } | ||||||
| 500 | |||||||
| 501 | sub _tod_P | ||||||
| 502 | { | ||||||
| 503 | 0 | 0 | return &_tod_a; | ||||
| 504 | } | ||||||
| 505 | |||||||
| 506 | sub _tod_am | ||||||
| 507 | { | ||||||
| 508 | 0 | 0 | return &_tod_a; | ||||
| 509 | } | ||||||
| 510 | |||||||
| 511 | sub _tod_pm | ||||||
| 512 | { | ||||||
| 513 | 0 | 0 | return &_tod_a; | ||||
| 514 | } | ||||||
| 515 | |||||||
| 516 | sub _tod_AM | ||||||
| 517 | { | ||||||
| 518 | 0 | 0 | return &_tod_a; | ||||
| 519 | } | ||||||
| 520 | |||||||
| 521 | sub _tod_PM | ||||||
| 522 | { | ||||||
| 523 | 0 | 0 | return &_tod_a; | ||||
| 524 | } | ||||||
| 525 | |||||||
| 526 | sub _tod_mi | ||||||
| 527 | { | ||||||
| 528 | 0 | 0 | my $indx = shift; | ||||
| 529 | 0 | $inputs[$indx] =~ s/^0//; | |||||
| 530 | 0 | 0 | 0 | return "Invalid minutes ($inputs[$indx])! " | |||
| 531 | unless ($inputs[$indx] >= 0 and $inputs[$indx] <= 59); | ||||||
| 532 | 0 | $tl[1] = $inputs[$indx]; | |||||
| 533 | 0 | 0 | $rtnTime += ($inputs[$indx] * 60) if ($rtnTime); | ||||
| 534 | 0 | return ''; | |||||
| 535 | } | ||||||
| 536 | |||||||
| 537 | sub _tod_sssss | ||||||
| 538 | { | ||||||
| 539 | 0 | 0 | my $indx = shift; | ||||
| 540 | 0 | $inputs[$indx] =~ s/^0//; | |||||
| 541 | 0 | 0 | 0 | return "Invalid seconds ($inputs[$indx])! " | |||
| 542 | unless ($inputs[$indx] >= 0 and $inputs[$indx] <= 86400); | ||||||
| 543 | 0 | $tl[2] = int($inputs[$indx] / 3600); | |||||
| 544 | 0 | $tl[0] = $inputs[$indx] % 60; | |||||
| 545 | 0 | $tl[1] = int($inputs[$indx]/60) % 60; | |||||
| 546 | 0 | $rtnTime += $inputs[$indx]; | |||||
| 547 | 0 | return ''; | |||||
| 548 | } | ||||||
| 549 | |||||||
| 550 | sub _tod_ss | ||||||
| 551 | { | ||||||
| 552 | 0 | 0 | my $indx = shift; | ||||
| 553 | 0 | $inputs[$indx] =~ s/^0//; | |||||
| 554 | 0 | 0 | 0 | return "Invalid seconds ($inputs[$indx])! " | |||
| 555 | unless ($inputs[$indx] >= 0 and $inputs[$indx] <= 59); | ||||||
| 556 | 0 | $tl[0] = $inputs[$indx]; | |||||
| 557 | 0 | $rtnTime += $inputs[$indx]; | |||||
| 558 | 0 | return ''; | |||||
| 559 | } | ||||||
| 560 | |||||||
| 561 | sub _tod_d | ||||||
| 562 | { | ||||||
| 563 | 0 | 0 | return ''; | ||||
| 564 | } | ||||||
| 565 | |||||||
| 566 | sub _tod_d0 | ||||||
| 567 | { | ||||||
| 568 | 0 | 0 | return ''; | ||||
| 569 | } | ||||||
| 570 | |||||||
| 571 | sub _tod_day | ||||||
| 572 | { | ||||||
| 573 | 0 | 0 | my %dayhash = ( | ||||
| 574 | 'sun' => '0', | ||||||
| 575 | 'mon' => 1, | ||||||
| 576 | 'tue' => 2, | ||||||
| 577 | 'wed' => 3, | ||||||
| 578 | 'thu' => 4, | ||||||
| 579 | 'fri' => 5, | ||||||
| 580 | 'sat' => 6 | ||||||
| 581 | ); | ||||||
| 582 | |||||||
| 583 | 0 | my $indx = shift; | |||||
| 584 | 0 | $inputs[$indx] =~ tr/A-Z/a-z/; | |||||
| 585 | 0 | 0 | return "Invalid Day ($inputs[$indx])! " unless (defined $mthhash{$inputs[$indx]}); | ||||
| 586 | 0 | return ''; | |||||
| 587 | } | ||||||
| 588 | |||||||
| 589 | sub _tod_Day | ||||||
| 590 | { | ||||||
| 591 | 0 | 0 | return &_tod_day(@_); | ||||
| 592 | } | ||||||
| 593 | |||||||
| 594 | sub _tod_DAY | ||||||
| 595 | { | ||||||
| 596 | 0 | 0 | return &_tod_day(@_); | ||||
| 597 | } | ||||||
| 598 | |||||||
| 599 | sub _tod_dayofweek | ||||||
| 600 | { | ||||||
| 601 | 0 | 0 | my %dayhash = ( | ||||
| 602 | 'sunday' => '0', | ||||||
| 603 | 'monday' => 1, | ||||||
| 604 | 'tuesday' => 2, | ||||||
| 605 | 'wednesday' => 3, | ||||||
| 606 | 'thursday' => 4, | ||||||
| 607 | 'friday' => 5, | ||||||
| 608 | 'saturday' => 6 | ||||||
| 609 | ); | ||||||
| 610 | |||||||
| 611 | 0 | my $indx = shift; | |||||
| 612 | 0 | $inputs[$indx] =~ tr/A-Z/a-z/; | |||||
| 613 | 0 | 0 | return "Invalid Day ($inputs[$indx])! " unless (defined $dayhash{$inputs[$indx]}); | ||||
| 614 | 0 | return ''; | |||||
| 615 | } | ||||||
| 616 | |||||||
| 617 | sub _tod_Dayofweek | ||||||
| 618 | { | ||||||
| 619 | 0 | 0 | return &_tod_day(@_); | ||||
| 620 | } | ||||||
| 621 | |||||||
| 622 | sub _tod_DAYOFWEEK | ||||||
| 623 | { | ||||||
| 624 | 0 | 0 | return &_tod_day(@_); | ||||
| 625 | } | ||||||
| 626 | |||||||
| 627 | sub _tod_ww | ||||||
| 628 | { | ||||||
| 629 | 0 | 0 | return ''; | ||||
| 630 | } | ||||||
| 631 | |||||||
| 632 | sub _tod_q | ||||||
| 633 | { | ||||||
| 634 | 0 | 0 | return ''; | ||||
| 635 | } | ||||||
| 636 | |||||||
| 637 | 1 |