$wday,
$yday,
$isdst
- ) = localtime($time);
+ ) = localtime ($time);
# Adjust month
$mon++;
my $days = 0;
my $m = 1;
- foreach (@months) {
+ for (@months) {
last if $m >= $month;
$m++;
$days += $_;
- } # foreach
+ } # for
return $days + $day;
} # julian
hours => $hours
days => $days
month => $month
-
+
Note that month will simply increment the month number, adjusting for overflow
of year if appropriate. Therefore a date of 2/28/2001 would increase by 1 month
to yield 3/28/2001. And, unfortunately, an increase of 1 month to 1/30/2011
);
for (keys %parms) {
- unless (InArray($_, @validKeys)) {
+ unless (InArray ($_, @validKeys)) {
croak "Invalid key in DateUtils::Add: $_";
} # unless
} # for
my $month = substr $datetime, 5, 2;
$years += ($month + $months) / 12;
- substr($datetime, 5, 2) = ($month + $months) % 12;
+ substr ($datetime, 5, 2) = ($month + $months) % 12;
- substr($datetime, 0, 4) = substr ($datetime, 0, 4) + $years;
+ substr ($datetime, 0, 4) = substr ($datetime, 0, 4) + $years;
} # if
return $datetime;
my $timestamp_days = julian $timestamp_year, $month, $day;
if ($timestamp_year > $today_year or
- ($timestamp_days > $today_days and $timestamp_year == $today_year)) {
+ ($timestamp_days > $today_days and $timestamp_year == $today_year)) {
return;
} else {
my $leap_days = 0;
for (my $i = $timestamp_year; $i < $today_year; $i++) {
-
$leap_days++ if $i % 4 == 0;
} # for
=pod
-=head2 Compare ($date2, $date2)
+=head2 Compare ($date1, $date2)
Compares two datetimes returning -1 if $date1 < $date2, 0 if equal or 1 if
$date1 > $date2
$days += $monthDays[$month - 1];
- $days++
- if _is_leap_year ($year) and $month > 2;
+ $days++ if _is_leap_year ($year) and $month > 2;
- $days += $day - 1;
+ $days += $day - 1;
return ($days * $SECS_IN_DAY)
+ ($hour * $SECS_IN_HOUR)
=cut
- my $year = 1970;
my ($month, $day, $hour, $minute, $seconds);
+
+ my $year = 1970;
my $leapYearSecs = 366 * $SECS_IN_DAY;
my $yearSecs = $leapYearSecs - $SECS_IN_DAY;
while () {
my $amount = _is_leap_year ($year) ? $leapYearSecs : $yearSecs;
- last
- if $amount > $epoch;
+ last if $amount > $epoch;
$epoch -= $amount;
$year++;
} # while
- my $leapYearAdjustment = _is_leap_year($year) ? 1 : 0;
+ my $leapYearAdjustment = _is_leap_year ($year) ? 1 : 0;
if ($epoch >= (334 + $leapYearAdjustment) * $SECS_IN_DAY) {
$month = '12';
$month = '01';
} # if
- $day = int(($epoch / $SECS_IN_DAY) + 1);
+ $day = int (($epoch / $SECS_IN_DAY) + 1);
$epoch = $epoch % $SECS_IN_DAY;
- $hour = int($epoch / $SECS_IN_HOUR);
+ $hour = int ($epoch / $SECS_IN_HOUR);
$epoch = $epoch % $SECS_IN_HOUR;
- $minute = int($epoch / $SECS_IN_MIN);
+ $minute = int ($epoch / $SECS_IN_MIN);
$seconds = $epoch % $SECS_IN_MIN;
$day = "0$day" if $day < 10;
=cut
my @localtime = localtime;
- my ($sec, $min, $hour, $mday, $mon, $year) = gmtime(
+ my ($sec, $min, $hour, $mday, $mon, $year) = gmtime (
DateToEpoch ($datetime) - (timegm (@localtime) - timelocal (@localtime))
);
$year += 1900;
$mon++;
- $sec = '0' . $sec if $sec < 10;
- $min = '0' . $min if $min < 10;
- $hour = '0' . $hour if $hour < 10;
+ $sec = '0' . $sec if $sec < 10;
+ $min = '0' . $min if $min < 10;
+ $hour = '0' . $hour if $hour < 10;
$mon = '0' . $mon if $mon < 10;
$mday = '0' . $mday if $mday < 10;
my @localtime = localtime;
- return EpochToDate (
+ return EpochToDate(
DateToEpoch ($utcdatetime) + (timegm (@localtime) - timelocal (@localtime))
);
} # UTC2Localtime
-sub FormatDate($) {
- my ($date) = @_;
+sub FormatDate($;$) {
+ my ($date, $separator) = @_;
=pod
-=head2 FormatDate ($date)
+=head2 FormatDate ($date, $separator)
Formats date
Date in YYYYMMDD
+=tiem $separator
+
+If specified, indicates that $date has separators (e.g. 2021-07-04).
+
=back
=for html </blockquote>
=cut
- return substr ($date, 4, 2)
- . "/"
- . substr ($date, 6, 2)
- . "/"
- . substr ($date, 0, 4);
+ unless ($separator) {
+ return substr($date, 4, 2) . '/'
+ . substr($date, 6, 2) . '/'
+ . substr($date, 0, 4);
+ } else {
+ return substr($date, 5, 2)
+ . '/'
+ . substr($date, 8, 2)
+ . '/'
+ . substr($date, 0, 4);
+ } # if
} # FormatDate
sub FormatTime($) {
my $year = substr $sqldatetime, 0, 4;
my $month = substr $sqldatetime, 5, 2;
my $day = substr $sqldatetime, 8, 2;
- my $time = FormatTime(substr $sqldatetime, 11);
+ my $time = FormatTime (substr $sqldatetime, 11);
return $months{$month} . " $day, $year \@ $time";
} # SQLDatetime2UnixDatetime
my $month = substr $timestamp, 5, 2;
my $day = substr $timestamp, 8, 2;
+ # We are not properly accounting for leap days but this is just a rough
+ # estimate anyway
+ if ($nbr_of_days > 365) {
+ $year -= int $nbr_of_days / 365;
+
+ $nbr_of_days = $nbr_of_days % 365;
+ } # if
+
# Convert to Julian
my $days = julian $year, $month, $day;
=cut
- return UnixDatetime2SQLDatetime (scalar (localtime));
+ return UnixDatetime2SQLDatetime(scalar localtime);
} # Today2SQLDatetime
sub UnixDatetime2SQLDatetime($) {
return "$year$mon${mday}_$hour$min$sec";
} # timestamp
-sub MDYHMS2SQLDatetime($) {
- my ($datetime) = @_;
-
- $datetime =~ s/^\s+|\s+$//g;
-
- my ($year, $mon, $day, $hour, $min, $sec, $ampm);
-
- # For datetime format of MM/DD/YYYY HH:MM:SS [Am|Pm]
- if ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2}) (\w{2})$/) {
- $mon = $1;
- $day = $2;
- $year = $3;
- $hour = $4;
- $min = $5;
- $sec = $6;
- $ampm = $7;
- # For datetime format of MM/DD/YYYY HH:MM:SS
- } elsif ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/){
- $mon = $1;
- $day = $2;
- $year = $3;
- $hour = $4;
- $min = $5;
- $sec = $6;
- # For datetime format of MM/DD/YYYY
- } elsif ($datetime =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) {
- $mon = $1;
- $day = $2;
- $year = $3;
- $hour = '00';
- $min = '00';
- $sec = '00';
- } else {
- return
- } # if
-
- # Range checks
- return if $mon > 12 or $mon <= 0;
- return if $day > 31 or $day <= 0;
- return if $hour > 23 or $hour < 0;
- return if $min > 59 or $min < 0;
-
- if ($day >= 31 and ($mon == 2
- or $mon == 4
- or $mon == 6
- or $mon == 9
- or $mon == 11)) {
- return;
- } # if
-
- return if $day > 29 and $mon == 2;
- return if $day == 29 and $mon == 2 and not _is_leap_year($year);
-
- # Convert to 24 hour time if necessary
- $hour += 12 if $ampm and $ampm =~ /pm/i;
-
- # Add any leading zeros
- $mon = "0$mon" if length $mon == 1;
- $day = "0$day" if length $day == 1;
- $hour = "0$hour" if length $hour == 1;
- $min = "0$min" if length $min == 1;
- $sec = "0$sec" if length $sec == 1;
-
- return "$year-$mon-$day $hour:$min:$sec";
-} # MDYHMS2SQLDatetime
-
1;
=head2 DEPENDENCIES