Index: class.datetime.inc.php =================================================================== RCS file: /cvsroot/phpgwapi/phpgwapi/inc/class.datetime.inc.php,v retrieving revision 1.5.2.12.2.8 diff -u -r1.5.2.12.2.8 class.datetime.inc.php --- class.datetime.inc.php 1 May 2004 09:32:26 -0000 1.5.2.12.2.8 +++ class.datetime.inc.php 5 May 2004 11:41:19 -0000 @@ -216,15 +216,45 @@ ); switch($weekday) { - case 0: - $sday = mktime(2,0,0,$month,$day - 1,$year); - break; case 6: - $sday = mktime(2,0,0,$month,$day,$year); break; - default: - $sday = mktime(2,0,0,$month,$day - ($weekday + 1),$year); + case 0: + if ($day == 1) + { + if ($month == 1) + { + --$year; + $month = 12; + } + else + { + --$month; + } + $day = $this->days_in_month($month,$year); + } + else + { + --$day; + } break; + default: + if ($day <= ($weekday + 1)) + { + if ($month == 1) + { + --$year; + $month = 12; + } + else + { + --$month; + } + $day = $this->days_in_month($month,$year) - $weekday; + } + else + { + $day -= ($weekday + 1); + } } break; case 'Monday': @@ -239,15 +269,45 @@ ); switch($weekday) { - case 0: - $sday = mktime(2,0,0,$month,$day - 6,$year); - break; case 1: - $sday = mktime(2,0,0,$month,$day,$year); break; - default: - $sday = mktime(2,0,0,$month,$day - ($weekday - 1),$year); + case 0: + if ($day <= 6) + { + if ($month == 1) + { + --$year; + $month = 12; + } + else + { + --$month; + } + $day = $this->days_in_month($month,$year) + ($day - 6); + } + else + { + $day -= 6; + } break; + default: + if ($day <= ($weekday == 0) ? 6 : ($weekday-1)) + { + if ($month == 1) + { + --$year; + $month = 12; + } + else + { + --$month; + } + $day = $this->days_in_month($month,$year) + ($day - (($weekday == 0) ? 6 : ($weekday-1))); + } + else + { + $day -= ($weekday-1); + } } break; case 'Sunday': @@ -261,9 +321,25 @@ 5 => 'Fri', 6 => 'Sat' ); - $sday = mktime(2,0,0,$month,$day - $weekday,$year); - break; + if ($day <= $weekday) + { + if ($month == 1) + { + --$year; + $month = 12; + } + else + { + --$month; + } + $day = $this->days_in_month($month,$year) + ($day - $weekday); + } + else + { + $day -= $weekday; + } } + $sday = mktime(2,0,0,$month,$day,$year); return $sday - 7200; }