]> jfr.im git - irc/SurrealServices/srsv.git/commitdiff
fix a 'days less than zero' bug
authortabris <redacted>
Mon, 1 Jul 2013 21:57:22 +0000 (21:57 +0000)
committertabris <redacted>
Mon, 1 Jul 2013 21:57:22 +0000 (21:57 +0000)
git-svn-id: http://svn.tabris.net/repos/srsv@3618 70d4eda1-72e9-0310-a436-91e5bd24443c

branches/0.4.3/SrSv/Time.pm

index 9625f34d44430207e6fc6797f8fcb61ecb783a0e..b12fe33185334a9232377b1c5f0e870c9a5e15a5 100644 (file)
@@ -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' : '' ) : '').