From: tabris Date: Mon, 1 Jul 2013 21:57:22 +0000 (+0000) Subject: fix a 'days less than zero' bug X-Git-Url: https://jfr.im/git/irc/SurrealServices/srsv.git/commitdiff_plain/cf7afd8f0cd87e912681706a7d4eac47813bea4e fix a 'days less than zero' bug git-svn-id: http://svn.tabris.net/repos/srsv@3618 70d4eda1-72e9-0310-a436-91e5bd24443c --- diff --git a/branches/0.4.3/SrSv/Time.pm b/branches/0.4.3/SrSv/Time.pm index 9625f34d..b12fe331 100644 --- a/branches/0.4.3/SrSv/Time.pm +++ b/branches/0.4.3/SrSv/Time.pm @@ -225,30 +225,34 @@ sub __time_rel_long($;$) { $result_hours, $result_mins, $result_secs); $result_secs = $sec2 - $sec1; $result_mins = $min2 - $min1; - if($result_secs < 0) { + while($result_secs < 0) { $result_secs += 60; $result_mins--; } $result_hours = $hour2 - $hour1; - if($result_mins < 0) { + while($result_mins < 0) { $result_mins += 60; $result_hours--; } $result_days = $mday2 - $mday1; - if($result_hours < 0) { + while($result_hours < 0) { $result_hours += 24; $result_days--; } - $result_months = $month2 - $month1; - if($result_days < 0) { + while($result_days < 0) { $result_days += get_monthdays( ($month2 == 0 ? 11 : $month2 - 1), ($month2 == 0 ? $year2 - 1: $year2)); - $result_months--; + #$result_months--; + if(--$month2 < 0) { + $year2--; + $month2 += 12; + }; } + $result_months = $month2 - $month1; # The following division relies on integer division, as 'use integer' is decl'd above. $result_weeks = $result_days / 7; $result_days = $result_days % 7; $result_years = $year2 - $year1; if($result_months < 0) { - $result_months += 12; $result_years-- + $result_months += 12; $result_years--; } return ($result_years, $result_months, $result_weeks, $result_days, $result_hours, $result_mins, $result_secs); } @@ -258,7 +262,7 @@ sub __time_rel_long($;$) { sub time_rel_long_all($;$) { my ($lesser_time, $greater_time) = @_; $greater_time = time() unless $greater_time; - my ($years, $months, $weeks, $days, $hours, $minutes, $seconds) = __time_rel_long($lesser_time); + my ($years, $months, $weeks, $days, $hours, $minutes, $seconds) = __time_rel_long($lesser_time, $greater_time); return ( $years ? "$years year".($years !=1 ? 's' : '') : '' ). ( $months ? ($years ? ', ' : '')."$months month".( $months!=1 ? 's' : '' ) : ''). ( $weeks ? (($years or $months) ? ', ' : '')."$weeks week".( $weeks!=1 ? 's' : '' ) : '').