cvs: php4 /pear/Date Calc.php
| From: | Monte Ohrt | Date: | Mon, 20 Nov 2000 18:01:18 +0000 |
| Subject: | cvs: php4 /pear/Date Calc.php | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-2706@lists.php.net to get a copy of this message | ||
mohrt Mon Nov 20 10:01:18 2000 EDT
Modified files:
/php4/pear/Date Calc.php
Log:
updated class to work statically. Added four new functions, see
www.phpinsider.com for details
Index: php4/pear/Date/Calc.php diff -u php4/pear/Date/Calc.php:1.6 php4/pear/Date/Calc.php:1.7 --- php4/pear/Date/Calc.php:1.6 Wed Nov 15 07:32:21 2000 +++ php4/pear/Date/Calc.php Mon Nov 20 10:01:18 2000 @@ -1,5 +1,10 @@ <?php +// The constant telling us what day starts the week. Monday (1) is the +// international standard. Redefine this to 0 if you want weeks to +// begin on Sunday. +define('DATE_CALC_BEGIN_WEEKDAY', 1); + /** * Date_Calc is a calendar class used to calculate and * manipulate calendar dates and retrieve dates in a calendar @@ -19,26 +24,13 @@ * * @access public * - * @version 1.1 + * @version 1.2 * @author Monte Ohrt <monte@ispi.net> */ class Date_Calc { /** - * Determine what day is the beginning of the calendar week. - * 0=Sunday, 1=Monday - * - * @access public - * @version 1.1 - * @author Monte Ohrt <monte@ispi.net> - * - * @var int [$begin_weekday] - */ - - var $begin_weekday = 0; // first day of week. - - /** * Returns the current local date. NOTE: This function * retrieves the local date using strftime(), which may * or may not be 32-bit safe on your system. @@ -86,7 +78,7 @@ return false; if($month < 1 || $month > 12) return false; - if($day < 1 || $day > 31 || $day > $this->daysInMonth($month,$year)) + if($day < 1 || $day > 31 || $day > Date_Calc::daysInMonth($month,$year)) return false; return true; @@ -97,7 +89,7 @@ { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(strlen($year) != 4) return false; @@ -123,9 +115,9 @@ function isFutureDate($day,$month,$year) { - $this_year = $this->dateNow("%Y"); - $this_month = $this->dateNow("%m"); - $this_day = $this->dateNow("%d"); + $this_year = Date_Calc::dateNow("%Y"); + $this_month = Date_Calc::dateNow("%m"); + $this_day = Date_Calc::dateNow("%d"); if($year > $this_year) @@ -155,9 +147,9 @@ function isPastDate($day,$month,$year) { - $this_year = $this->dateNow("%Y"); - $this_month = $this->dateNow("%m"); - $this_day = $this->dateNow("%d"); + $this_year = Date_Calc::dateNow("%Y"); + $this_month = Date_Calc::dateNow("%m"); + $this_day = Date_Calc::dateNow("%d"); if($year < $this_year) @@ -189,11 +181,11 @@ { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); if($month > 2) $month -= 2; @@ -230,18 +222,18 @@ function weekOfYear($day,$month,$year) { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $week_year = $year - 1501; $week_day = $week_year * 365 + floor($week_year / 4) - 29872 + 1 - floor($week_year / 100) + floor(($week_year - 300) / 400); $week_number = - floor(($this->julianDate($day,$month,$year) + floor(($week_day + 4) % 7)) / 7); + floor((Date_Calc::julianDate($day,$month,$year) + floor(($week_day + 4) % 7)) / 7); return $week_number; @@ -262,17 +254,17 @@ function julianDate($day="",$month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $days = array(0,31,59,90,120,151,181,212,243,273,304,334); $julian = ($days[$month - 1] + $day); - if($month > 2 && $this->isLeapYear($year)) + if($month > 2 && Date_Calc::isLeapYear($year)) $julian++; return($julian); @@ -294,11 +286,11 @@ function quarterOfYear($day="",$month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $year_quarter = (intval(($month - 1) / 3 + 1)); @@ -322,11 +314,11 @@ function beginOfNextMonth($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); if($month < 12) { @@ -340,7 +332,7 @@ $day=1; } - return $this->dateFormat($day,$month,$year,$format); + return Date_Calc::dateFormat($day,$month,$year,$format); } // end func beginOfNextMonth @@ -360,13 +352,13 @@ function endOfNextMonth($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $day = $this->daysInMonth($month,$year); + $day = Date_Calc::daysInMonth($month,$year); if($month < 12) { @@ -378,7 +370,7 @@ $month=1; } - return $this->dateFormat($day,$month,$year,$format); + return Date_Calc::dateFormat($day,$month,$year,$format); } // end func endOfNextMonth @@ -398,11 +390,11 @@ function beginOfPrevMonth($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); if($month > 1) { @@ -416,7 +408,7 @@ $day=1; } - return $this->dateFormat($day,$month,$year,$format); + return Date_Calc::dateFormat($day,$month,$year,$format); } // end func beginOfPrevMonth @@ -436,13 +428,13 @@ function endOfPrevMonth($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $day = $this->daysInMonth($month,$year); + $day = Date_Calc::daysInMonth($month,$year); if($month > 1) { @@ -454,7 +446,7 @@ $month=12; } - return $this->dateFormat($day,$month,$year,$format); + return Date_Calc::dateFormat($day,$month,$year,$format); } // end func endOfPrevMonth @@ -475,22 +467,22 @@ function nextWeekday($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $days = $this->dateToDays($day,$month,$year); + $days = Date_Calc::dateToDays($day,$month,$year); - if($this->dayOfWeek($day,$month,$year) == 5) + if(Date_Calc::dayOfWeek($day,$month,$year) == 5) $days += 3; - elseif($this->dayOfWeek($day,$month,$year) == 6) + elseif(Date_Calc::dayOfWeek($day,$month,$year) == 6) $days += 2; else $days += 1; - return($this->daysToDate($days,$format)); + return(Date_Calc::daysToDate($days,$format)); } // end func nextWeekday @@ -511,25 +503,150 @@ function prevWeekday($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $days = $this->dateToDays($day,$month,$year); + $days = Date_Calc::dateToDays($day,$month,$year); - if($this->dayOfWeek($day,$month,$year) == 1) + if(Date_Calc::dayOfWeek($day,$month,$year) == 1) $days -= 3; - elseif($this->dayOfWeek($day,$month,$year) == 0) + elseif(Date_Calc::dayOfWeek($day,$month,$year) == 0) $days -= 2; else $days -= 1; - return($this->daysToDate($days,$format)); + return(Date_Calc::daysToDate($days,$format)); } // end func prevWeekday - + + /** + * Returns date of the next specific day of the week + * from the given date. + * + * @param int day of week, 0=Sunday + * @param string year in format CCYY, default current local year + * @param string month in format MM, default current local month + * @param string day in format DD, default current local day + * @param boolean onOrAfter if true and days are same, returns current day + * @param string format for returned date + * + * @access public + * + * @return string date in given format + */ + + function nextDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",$onOrAfter=false) + { + if(empty($year)) + $year = Date_Calc::dateNow("%Y"); + if(empty($month)) + $month = Date_Calc::dateNow("%m"); + if(empty($day)) + $day = Date_Calc::dateNow("%d"); + + $days = Date_Calc::dateToDays($day,$month,$year); + $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year); + + if($curr_weekday == $dow) + { + if(!$onOrAfter) + $days += 7; + } + elseif($curr_weekday > $dow) + $days += 7 - ( $curr_weekday - $dow ); + else + $days += $dow - $curr_weekday; + + return(Date_Calc::daysToDate($days,$format)); + + } // end func nextDayOfWeek + + /** + * Returns date of the previous specific day of the week + * from the given date. + * + * @param int day of week, 0=Sunday + * @param string year in format CCYY, default current local year + * @param string month in format MM, default current local month + * @param string day in format DD, default current local day + * @param boolean onOrBefore if true and days are same, returns current day + * @param string format for returned date + * + * @access public + * + * @return string date in given format + */ + + function prevDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",$onOrBefore=false) + { + if(empty($year)) + $year = Date_Calc::dateNow("%Y"); + if(empty($month)) + $month = Date_Calc::dateNow("%m"); + if(empty($day)) + $day = Date_Calc::dateNow("%d"); + + $days = Date_Calc::dateToDays($day,$month,$year); + $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year); + + if($curr_weekday == $dow) + { + if(!$onOrBefore) + $days -= 7; + } + elseif($curr_weekday < $dow) + $days -= 7 - ( $dow - $curr_weekday ); + else + $days -= $curr_weekday - $dow; + + return(Date_Calc::daysToDate($days,$format)); + + } // end func prevDayOfWeek + + /** + * Returns date of the next specific day of the week + * on or before the given date. + * + * @param int day of week, 0=Sunday + * @param string year in format CCYY, default current local year + * @param string month in format MM, default current local month + * @param string day in format DD, default current local day + * @param string format for returned date + * + * @access public + * + * @return string date in given format + */ + + function nextDayOfWeekOnOrAfter($dow,$day="",$month="",$year="",$format="%Y%m%d") + { + return(Date_Calc::nextDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",true)); + } // end func nextDayOfWeekOnOrAfter + + /** + * Returns date of the previous specific day of the week + * on or before the given date. + * + * @param int day of week, 0=Sunday + * @param string year in format CCYY, default current local year + * @param string month in format MM, default current local month + * @param string day in format DD, default current local day + * @param string format for returned date + * + * @access public + * + * @return string date in given format + */ + + function prevDayOfWeekOnOrBefore($dow,$day="",$month="",$year="",$format="%Y%m%d") + { + return(Date_Calc::prevDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",true)); + + } // end func prevDayOfWeekOnOrAfter + /** * Returns date of day after given date. * @@ -546,15 +663,15 @@ function nextDay($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $days = $this->dateToDays($day,$month,$year); + $days = Date_Calc::dateToDays($day,$month,$year); - return($this->daysToDate($days + 1,$format)); + return(Date_Calc::daysToDate($days + 1,$format)); } // end func nextDay @@ -574,15 +691,15 @@ function prevDay($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $days = $this->dateToDays($day,$month,$year); + $days = Date_Calc::dateToDays($day,$month,$year); - return($this->daysToDate($days - 1,$format)); + return(Date_Calc::daysToDate($days - 1,$format)); } // end func prevDay @@ -626,13 +743,13 @@ function dateDiff($day1,$month1,$year1,$day2,$month2,$year2) { - if(!$this->isValidDate($day1,$month1,$year1)) + if(!Date_Calc::isValidDate($day1,$month1,$year1)) return -1; - if(!$this->isValidDate($day2,$month2,$year2)) + if(!Date_Calc::isValidDate($day2,$month2,$year2)) return -1; - return(abs(($this->dateToDays($day1,$month1,$year1)) - - ($this->dateToDays($day2,$month2,$year2)))); + return(abs((Date_Calc::dateToDays($day1,$month1,$year1)) + - (Date_Calc::dateToDays($day2,$month2,$year2)))); } // end func dateDiff @@ -649,13 +766,13 @@ function daysInMonth($month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if($month == 2) { - if($this->isLeapYear($year)) + if(Date_Calc::isLeapYear($year)) return 29; else return 28; @@ -683,11 +800,11 @@ function weeksInMonth($month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); - return ceil(($this->daysInMonth($month,$year)+$this->firstOfMonthWeekday("01",$month,$year)-$this->begin_weekday)/7); + return ceil((Date_Calc::daysInMonth($month,$year)+Date_Calc::firstOfMonthWeekday("01",$month,$year)-DATE_CALC_BEGIN_WEEKDAY)/7); } // end func weeksInMonth @@ -705,11 +822,11 @@ function firstOfMonthWeekday($month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); - return($this->dayOfWeek("01",$month,$year)); + return(Date_Calc::dayOfWeek("01",$month,$year)); } // end func firstOfMonthWeekday @@ -728,17 +845,17 @@ function beginOfMonth($month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); - return($this->dateFormat("01",$month,$year,$format)); + return(Date_Calc::dateFormat("01",$month,$year,$format)); } // end of func beginOfMonth /** * Find the month day of the beginning of week for given date, - * using $this->begin_weekday. (can return weekday of prev month.) + * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.) * * @param string year in format CCYY, default current local year * @param string month in format MM, default current local month @@ -753,24 +870,24 @@ function beginOfWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $this_weekday = $this->dayOfWeek($day,$month,$year); + $this_weekday = Date_Calc::dayOfWeek($day,$month,$year); - $beginOfWeek = ($this->dateToDays($day,$month,$year) - - ($this_weekday - $this->begin_weekday)); + $beginOfWeek = (Date_Calc::dateToDays($day,$month,$year) + - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY)); - return($this->daysToDate($beginOfWeek,$format)); + return(Date_Calc::daysToDate($beginOfWeek,$format)); } // end of func beginOfWeek /** * Find the month day of the end of week for given date, - * using $this->begin_weekday. (can return weekday + * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday * of following month.) * * @param string year in format CCYY, default current local year @@ -786,24 +903,24 @@ function endOfWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $this_weekday = $this->dayOfWeek($day,$month,$year); + $this_weekday = Date_Calc::dayOfWeek($day,$month,$year); - $last_dayOfWeek = ($this->dateToDays($day,$month,$year) - + (6 - $this_weekday + $this->begin_weekday)); + $last_dayOfWeek = (Date_Calc::dateToDays($day,$month,$year) + + (6 - $this_weekday + DATE_CALC_BEGIN_WEEKDAY)); - return($this->daysToDate($last_dayOfWeek,$format)); + return(Date_Calc::daysToDate($last_dayOfWeek,$format)); } // end func endOfWeek /** * Find the month day of the beginning of week after given date, - * using $this->begin_weekday. (can return weekday of prev month.) + * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.) * * @param string year in format CCYY, default current local year * @param string month in format MM, default current local month @@ -818,30 +935,30 @@ function beginOfNextWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $date = $this->daysToDate($this->dateToDays($day+7,$month,$year),"%Y%m%d"); + $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day+7,$month,$year),"%Y%m%d"); $next_week_year = substr($date,0,4); $next_week_month = substr($date,4,2); $next_week_day = substr($date,6,2); - $this_weekday = $this->dayOfWeek($next_week_day,$next_week_month,$next_week_year); + $this_weekday = Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year); - $beginOfWeek = ($this->dateToDays($next_week_day,$next_week_month,$next_week_year) - - ($this_weekday - $this->begin_weekday)); + $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year) + - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY)); - return($this->daysToDate($beginOfWeek,$format)); + return(Date_Calc::daysToDate($beginOfWeek,$format)); } // end func beginOfNextWeek /** * Find the month day of the beginning of week before given date, - * using $this->begin_weekday. (can return weekday of prev month.) + * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.) * * @param string year in format CCYY, default current local year * @param string month in format MM, default current local month @@ -856,24 +973,24 @@ function beginOfPrevWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $date = $this->daysToDate($this->dateToDays($day-7,$month,$year),"%Y%m%d"); + $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day-7,$month,$year),"%Y%m%d"); $next_week_year = substr($date,0,4); $next_week_month = substr($date,4,2); $next_week_day = substr($date,6,2); - $this_weekday = $this->dayOfWeek($next_week_day,$next_week_month,$next_week_year); + $this_weekday = Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year); - $beginOfWeek = ($this->dateToDays($next_week_day,$next_week_month,$next_week_year) - - ($this_weekday - $this->begin_weekday)); + $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year) + - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY)); - return($this->daysToDate($beginOfWeek,$format)); + return(Date_Calc::daysToDate($beginOfWeek,$format)); } // end func beginOfPrevWeek @@ -893,21 +1010,21 @@ function getCalendarWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $week_array = array(); // date for the column of week - $curr_day = ($this->dateToDays($day,$month,$year) - - (($this->dayOfWeek($day,$month,$year) - $this->begin_weekday))); + $curr_day = (Date_Calc::dateToDays($day,$month,$year) + - ((Date_Calc::dayOfWeek($day,$month,$year) - DATE_CALC_BEGIN_WEEKDAY))); for($counter=0; $counter <= 6; $counter++) { - $week_array[$counter] = $this->daysToDate($curr_day,$format); + $week_array[$counter] = Date_Calc::daysToDate($curr_day,$format); $curr_day++; } @@ -931,25 +1048,25 @@ function getCalendarMonth($month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); $month_array = array(); // date for the first row, first column of calendar month - $curr_day = ($this->dateToDays("01",$month,$year) - - $this->firstOfMonthWeekday("01",$month,$year) + $this->begin_weekday); + $curr_day = (Date_Calc::dateToDays("01",$month,$year) + - Date_Calc::firstOfMonthWeekday("01",$month,$year) + DATE_CALC_BEGIN_WEEKDAY); // number of days in this month - $daysInMonth = $this->daysInMonth($month,$year); + $daysInMonth = Date_Calc::daysInMonth($month,$year); - $weeksInMonth = $this->weeksInMonth($month,$year); + $weeksInMonth = Date_Calc::weeksInMonth($month,$year); for($row_counter=0; $row_counter < $weeksInMonth; $row_counter++) { for($column_counter=0; $column_counter <= 6; $column_counter++) { - $month_array[$row_counter][$column_counter] = $this->daysToDate($curr_day,$format); + $month_array[$row_counter][$column_counter] = Date_Calc::daysToDate($curr_day,$format); $curr_day++; } } @@ -973,14 +1090,14 @@ function getCalendarYear($year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); $year_array = array(); for($curr_month=0; $curr_month <=11; $curr_month++) { - $year_array[$curr_month] = $this->getCalendarMonth(sprintf("%02d",$curr_month+1),$year,$format); + $year_array[$curr_month] = Date_Calc::getCalendarMonth(sprintf("%02d",$curr_month+1),$year,$format); /* for ($x=0; $x< count($year_array[$curr_month]); $x++) { @@ -1077,7 +1194,7 @@ $century = sprintf("%02d",$century); $year = sprintf("%02d",$year); - return($this->dateFormat($day,$month,$century.$year,$format)); + return(Date_Calc::dateFormat($day,$month,$century.$year,$format)); } // end func daysToDate @@ -1102,15 +1219,15 @@ $month = sprintf("%02d",$month); $DOW1day = sprintf("%02d",(($occurance - 1) * 7 + 1)); - $DOW1 = $this->dayOfWeek($month,$year,$DOW1day); + $DOW1 = Date_Calc::dayOfWeek($month,$year,$DOW1day); $wdate = ($occurance - 1) * 7 + 1 + (7 + $dayOfWeek - $DOW1) % 7; - if( $wdate > $this->daysInMonth($month,$year)) + if( $wdate > Date_Calc::daysInMonth($month,$year)) return -1; else - return($this->dateFormat($month,$year,$wdate,$format)); + return(Date_Calc::dateFormat($month,$year,$wdate,$format)); } // end func NWeekdayOfMonth @@ -1155,11 +1272,11 @@ function dateFormat($day,$month,$year,$format) { - if(!$this->isValidDate($day,$month,$year)) + if(!Date_Calc::isValidDate($day,$month,$year)) { - $year = $this->dateNow("%Y"); - $month = $this->dateNow("%m"); - $day = $this->dateNow("%d"); + $year = Date_Calc::dateNow("%Y"); + $month = Date_Calc::dateNow("%m"); + $day = Date_Calc::dateNow("%d"); } $output = ""; @@ -1173,16 +1290,16 @@ switch($nextchar) { case "a": - $output .= $this->getWeekdayAbbrname($day,$month,$year); + $output .= Date_Calc::getWeekdayAbbrname($day,$month,$year); break; case "A": - $output .= $this->getWeekdayFullname($day,$month,$year); + $output .= Date_Calc::getWeekdayFullname($day,$month,$year); break; case "b": - $output .= $this->getMonthAbbrname($month); + $output .= Date_Calc::getMonthAbbrname($month); break; case "B": - $output .= $this->getMonthFullname($month); + $output .= Date_Calc::getMonthFullname($month); break; case "d": $output .= sprintf("%02d",$day); @@ -1191,10 +1308,10 @@ $output .= $day; break; case "E": - $output .= $this->dateToDays($day,$month,$year); + $output .= Date_Calc::dateToDays($day,$month,$year); break; case "j": - $output .= $this->julianDate($day,$month,$year); + $output .= Date_Calc::julianDate($day,$month,$year); break; case "m": $output .= sprintf("%02d",$month); @@ -1206,10 +1323,10 @@ $output .= "\t"; break; case "w": - $output .= $this->dayOfWeek($day,$month,$year); + $output .= Date_Calc::dayOfWeek($day,$month,$year); break; case "U": - $output .= $this->weekOfYear($day,$month,$year); + $output .= Date_Calc::weekOfYear($day,$month,$year); break; case "y": $output .= substr($year,2,2); @@ -1244,7 +1361,7 @@ function getYear() { - return $this->dateNow("%Y"); + return Date_Calc::dateNow("%Y"); } // end func getYear @@ -1258,7 +1375,7 @@ function getMonth() { - return $this->dateNow("%m"); + return Date_Calc::dateNow("%m"); } // end func getMonth @@ -1272,7 +1389,7 @@ function getDay() { - return $this->dateNow("%d"); + return Date_Calc::dateNow("%d"); } // end func getDay @@ -1289,7 +1406,7 @@ function getMonthFullname($month) { if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); $month_names = array("January","February","March","April","May","June", "July","August","September","October","November","December"); @@ -1312,7 +1429,7 @@ function getMonthAbbrname($month,$length=3) { if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); $month_names = array("January","February","March","April","May","June", "July","August","September","October","November","December"); @@ -1336,15 +1453,15 @@ function getWeekdayFullname($day="",$month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $weekday_names = array("Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday"); - $weekday = $this->dayOfWeek($day,$month,$year); + $weekday = Date_Calc::dayOfWeek($day,$month,$year); return $weekday_names[$weekday]; @@ -1366,16 +1483,16 @@ function getWeekdayAbbrname($day="",$month="",$year="",$length=3) { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $weekday_names = array("Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday"); - $weekday = $this->dayOfWeek($day,$month,$year); + $weekday = Date_Calc::dayOfWeek($day,$month,$year); return substr($weekday_names[$weekday],0,$length);
Index: php4/pear/Date/Calc.php diff -u php4/pear/Date/Calc.php:1.6 php4/pear/Date/Calc.php:1.7 --- php4/pear/Date/Calc.php:1.6 Wed Nov 15 07:32:21 2000 +++ php4/pear/Date/Calc.php Mon Nov 20 10:01:18 2000 @@ -1,5 +1,10 @@ <?php +// The constant telling us what day starts the week. Monday (1) is the +// international standard. Redefine this to 0 if you want weeks to +// begin on Sunday. +define('DATE_CALC_BEGIN_WEEKDAY', 1); + /** * Date_Calc is a calendar class used to calculate and * manipulate calendar dates and retrieve dates in a calendar @@ -19,26 +24,13 @@ * * @access public * - * @version 1.1 + * @version 1.2 * @author Monte Ohrt <monte@ispi.net> */ class Date_Calc { /** - * Determine what day is the beginning of the calendar week. - * 0=Sunday, 1=Monday - * - * @access public - * @version 1.1 - * @author Monte Ohrt <monte@ispi.net> - * - * @var int [$begin_weekday] - */ - - var $begin_weekday = 0; // first day of week. - - /** * Returns the current local date. NOTE: This function * retrieves the local date using strftime(), which may * or may not be 32-bit safe on your system. @@ -86,7 +78,7 @@ return false; if($month < 1 || $month > 12) return false; - if($day < 1 || $day > 31 || $day > $this->daysInMonth($month,$year)) + if($day < 1 || $day > 31 || $day > Date_Calc::daysInMonth($month,$year)) return false; return true; @@ -97,7 +89,7 @@ { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(strlen($year) != 4) return false; @@ -123,9 +115,9 @@ function isFutureDate($day,$month,$year) { - $this_year = $this->dateNow("%Y"); - $this_month = $this->dateNow("%m"); - $this_day = $this->dateNow("%d"); + $this_year = Date_Calc::dateNow("%Y"); + $this_month = Date_Calc::dateNow("%m"); + $this_day = Date_Calc::dateNow("%d"); if($year > $this_year) @@ -155,9 +147,9 @@ function isPastDate($day,$month,$year) { - $this_year = $this->dateNow("%Y"); - $this_month = $this->dateNow("%m"); - $this_day = $this->dateNow("%d"); + $this_year = Date_Calc::dateNow("%Y"); + $this_month = Date_Calc::dateNow("%m"); + $this_day = Date_Calc::dateNow("%d"); if($year < $this_year) @@ -189,11 +181,11 @@ { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); if($month > 2) $month -= 2; @@ -230,18 +222,18 @@ function weekOfYear($day,$month,$year) { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $week_year = $year - 1501; $week_day = $week_year * 365 + floor($week_year / 4) - 29872 + 1 - floor($week_year / 100) + floor(($week_year - 300) / 400); $week_number = - floor(($this->julianDate($day,$month,$year) + floor(($week_day + 4) % 7)) / 7); + floor((Date_Calc::julianDate($day,$month,$year) + floor(($week_day + 4) % 7)) / 7); return $week_number; @@ -262,17 +254,17 @@ function julianDate($day="",$month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $days = array(0,31,59,90,120,151,181,212,243,273,304,334); $julian = ($days[$month - 1] + $day); - if($month > 2 && $this->isLeapYear($year)) + if($month > 2 && Date_Calc::isLeapYear($year)) $julian++; return($julian); @@ -294,11 +286,11 @@ function quarterOfYear($day="",$month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $year_quarter = (intval(($month - 1) / 3 + 1)); @@ -322,11 +314,11 @@ function beginOfNextMonth($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); if($month < 12) { @@ -340,7 +332,7 @@ $day=1; } - return $this->dateFormat($day,$month,$year,$format); + return Date_Calc::dateFormat($day,$month,$year,$format); } // end func beginOfNextMonth @@ -360,13 +352,13 @@ function endOfNextMonth($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $day = $this->daysInMonth($month,$year); + $day = Date_Calc::daysInMonth($month,$year); if($month < 12) { @@ -378,7 +370,7 @@ $month=1; } - return $this->dateFormat($day,$month,$year,$format); + return Date_Calc::dateFormat($day,$month,$year,$format); } // end func endOfNextMonth @@ -398,11 +390,11 @@ function beginOfPrevMonth($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); if($month > 1) { @@ -416,7 +408,7 @@ $day=1; } - return $this->dateFormat($day,$month,$year,$format); + return Date_Calc::dateFormat($day,$month,$year,$format); } // end func beginOfPrevMonth @@ -436,13 +428,13 @@ function endOfPrevMonth($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $day = $this->daysInMonth($month,$year); + $day = Date_Calc::daysInMonth($month,$year); if($month > 1) { @@ -454,7 +446,7 @@ $month=12; } - return $this->dateFormat($day,$month,$year,$format); + return Date_Calc::dateFormat($day,$month,$year,$format); } // end func endOfPrevMonth @@ -475,22 +467,22 @@ function nextWeekday($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $days = $this->dateToDays($day,$month,$year); + $days = Date_Calc::dateToDays($day,$month,$year); - if($this->dayOfWeek($day,$month,$year) == 5) + if(Date_Calc::dayOfWeek($day,$month,$year) == 5) $days += 3; - elseif($this->dayOfWeek($day,$month,$year) == 6) + elseif(Date_Calc::dayOfWeek($day,$month,$year) == 6) $days += 2; else $days += 1; - return($this->daysToDate($days,$format)); + return(Date_Calc::daysToDate($days,$format)); } // end func nextWeekday @@ -511,25 +503,150 @@ function prevWeekday($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $days = $this->dateToDays($day,$month,$year); + $days = Date_Calc::dateToDays($day,$month,$year); - if($this->dayOfWeek($day,$month,$year) == 1) + if(Date_Calc::dayOfWeek($day,$month,$year) == 1) $days -= 3; - elseif($this->dayOfWeek($day,$month,$year) == 0) + elseif(Date_Calc::dayOfWeek($day,$month,$year) == 0) $days -= 2; else $days -= 1; - return($this->daysToDate($days,$format)); + return(Date_Calc::daysToDate($days,$format)); } // end func prevWeekday - + + /** + * Returns date of the next specific day of the week + * from the given date. + * + * @param int day of week, 0=Sunday + * @param string year in format CCYY, default current local year + * @param string month in format MM, default current local month + * @param string day in format DD, default current local day + * @param boolean onOrAfter if true and days are same, returns current day + * @param string format for returned date + * + * @access public + * + * @return string date in given format + */ + + function nextDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",$onOrAfter=false) + { + if(empty($year)) + $year = Date_Calc::dateNow("%Y"); + if(empty($month)) + $month = Date_Calc::dateNow("%m"); + if(empty($day)) + $day = Date_Calc::dateNow("%d"); + + $days = Date_Calc::dateToDays($day,$month,$year); + $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year); + + if($curr_weekday == $dow) + { + if(!$onOrAfter) + $days += 7; + } + elseif($curr_weekday > $dow) + $days += 7 - ( $curr_weekday - $dow ); + else + $days += $dow - $curr_weekday; + + return(Date_Calc::daysToDate($days,$format)); + + } // end func nextDayOfWeek + + /** + * Returns date of the previous specific day of the week + * from the given date. + * + * @param int day of week, 0=Sunday + * @param string year in format CCYY, default current local year + * @param string month in format MM, default current local month + * @param string day in format DD, default current local day + * @param boolean onOrBefore if true and days are same, returns current day + * @param string format for returned date + * + * @access public + * + * @return string date in given format + */ + + function prevDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",$onOrBefore=false) + { + if(empty($year)) + $year = Date_Calc::dateNow("%Y"); + if(empty($month)) + $month = Date_Calc::dateNow("%m"); + if(empty($day)) + $day = Date_Calc::dateNow("%d"); + + $days = Date_Calc::dateToDays($day,$month,$year); + $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year); + + if($curr_weekday == $dow) + { + if(!$onOrBefore) + $days -= 7; + } + elseif($curr_weekday < $dow) + $days -= 7 - ( $dow - $curr_weekday ); + else + $days -= $curr_weekday - $dow; + + return(Date_Calc::daysToDate($days,$format)); + + } // end func prevDayOfWeek + + /** + * Returns date of the next specific day of the week + * on or before the given date. + * + * @param int day of week, 0=Sunday + * @param string year in format CCYY, default current local year + * @param string month in format MM, default current local month + * @param string day in format DD, default current local day + * @param string format for returned date + * + * @access public + * + * @return string date in given format + */ + + function nextDayOfWeekOnOrAfter($dow,$day="",$month="",$year="",$format="%Y%m%d") + { + return(Date_Calc::nextDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",true)); + } // end func nextDayOfWeekOnOrAfter + + /** + * Returns date of the previous specific day of the week + * on or before the given date. + * + * @param int day of week, 0=Sunday + * @param string year in format CCYY, default current local year + * @param string month in format MM, default current local month + * @param string day in format DD, default current local day + * @param string format for returned date + * + * @access public + * + * @return string date in given format + */ + + function prevDayOfWeekOnOrBefore($dow,$day="",$month="",$year="",$format="%Y%m%d") + { + return(Date_Calc::prevDayOfWeek($dow,$day="",$month="",$year="",$format="%Y%m%d",true)); + + } // end func prevDayOfWeekOnOrAfter + /** * Returns date of day after given date. * @@ -546,15 +663,15 @@ function nextDay($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $days = $this->dateToDays($day,$month,$year); + $days = Date_Calc::dateToDays($day,$month,$year); - return($this->daysToDate($days + 1,$format)); + return(Date_Calc::daysToDate($days + 1,$format)); } // end func nextDay @@ -574,15 +691,15 @@ function prevDay($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $days = $this->dateToDays($day,$month,$year); + $days = Date_Calc::dateToDays($day,$month,$year); - return($this->daysToDate($days - 1,$format)); + return(Date_Calc::daysToDate($days - 1,$format)); } // end func prevDay @@ -626,13 +743,13 @@ function dateDiff($day1,$month1,$year1,$day2,$month2,$year2) { - if(!$this->isValidDate($day1,$month1,$year1)) + if(!Date_Calc::isValidDate($day1,$month1,$year1)) return -1; - if(!$this->isValidDate($day2,$month2,$year2)) + if(!Date_Calc::isValidDate($day2,$month2,$year2)) return -1; - return(abs(($this->dateToDays($day1,$month1,$year1)) - - ($this->dateToDays($day2,$month2,$year2)))); + return(abs((Date_Calc::dateToDays($day1,$month1,$year1)) + - (Date_Calc::dateToDays($day2,$month2,$year2)))); } // end func dateDiff @@ -649,13 +766,13 @@ function daysInMonth($month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if($month == 2) { - if($this->isLeapYear($year)) + if(Date_Calc::isLeapYear($year)) return 29; else return 28; @@ -683,11 +800,11 @@ function weeksInMonth($month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); - return ceil(($this->daysInMonth($month,$year)+$this->firstOfMonthWeekday("01",$month,$year)-$this->begin_weekday)/7); + return ceil((Date_Calc::daysInMonth($month,$year)+Date_Calc::firstOfMonthWeekday("01",$month,$year)-DATE_CALC_BEGIN_WEEKDAY)/7); } // end func weeksInMonth @@ -705,11 +822,11 @@ function firstOfMonthWeekday($month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); - return($this->dayOfWeek("01",$month,$year)); + return(Date_Calc::dayOfWeek("01",$month,$year)); } // end func firstOfMonthWeekday @@ -728,17 +845,17 @@ function beginOfMonth($month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); - return($this->dateFormat("01",$month,$year,$format)); + return(Date_Calc::dateFormat("01",$month,$year,$format)); } // end of func beginOfMonth /** * Find the month day of the beginning of week for given date, - * using $this->begin_weekday. (can return weekday of prev month.) + * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.) * * @param string year in format CCYY, default current local year * @param string month in format MM, default current local month @@ -753,24 +870,24 @@ function beginOfWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $this_weekday = $this->dayOfWeek($day,$month,$year); + $this_weekday = Date_Calc::dayOfWeek($day,$month,$year); - $beginOfWeek = ($this->dateToDays($day,$month,$year) - - ($this_weekday - $this->begin_weekday)); + $beginOfWeek = (Date_Calc::dateToDays($day,$month,$year) + - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY)); - return($this->daysToDate($beginOfWeek,$format)); + return(Date_Calc::daysToDate($beginOfWeek,$format)); } // end of func beginOfWeek /** * Find the month day of the end of week for given date, - * using $this->begin_weekday. (can return weekday + * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday * of following month.) * * @param string year in format CCYY, default current local year @@ -786,24 +903,24 @@ function endOfWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $this_weekday = $this->dayOfWeek($day,$month,$year); + $this_weekday = Date_Calc::dayOfWeek($day,$month,$year); - $last_dayOfWeek = ($this->dateToDays($day,$month,$year) - + (6 - $this_weekday + $this->begin_weekday)); + $last_dayOfWeek = (Date_Calc::dateToDays($day,$month,$year) + + (6 - $this_weekday + DATE_CALC_BEGIN_WEEKDAY)); - return($this->daysToDate($last_dayOfWeek,$format)); + return(Date_Calc::daysToDate($last_dayOfWeek,$format)); } // end func endOfWeek /** * Find the month day of the beginning of week after given date, - * using $this->begin_weekday. (can return weekday of prev month.) + * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.) * * @param string year in format CCYY, default current local year * @param string month in format MM, default current local month @@ -818,30 +935,30 @@ function beginOfNextWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $date = $this->daysToDate($this->dateToDays($day+7,$month,$year),"%Y%m%d"); + $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day+7,$month,$year),"%Y%m%d"); $next_week_year = substr($date,0,4); $next_week_month = substr($date,4,2); $next_week_day = substr($date,6,2); - $this_weekday = $this->dayOfWeek($next_week_day,$next_week_month,$next_week_year); + $this_weekday = Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year); - $beginOfWeek = ($this->dateToDays($next_week_day,$next_week_month,$next_week_year) - - ($this_weekday - $this->begin_weekday)); + $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year) + - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY)); - return($this->daysToDate($beginOfWeek,$format)); + return(Date_Calc::daysToDate($beginOfWeek,$format)); } // end func beginOfNextWeek /** * Find the month day of the beginning of week before given date, - * using $this->begin_weekday. (can return weekday of prev month.) + * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.) * * @param string year in format CCYY, default current local year * @param string month in format MM, default current local month @@ -856,24 +973,24 @@ function beginOfPrevWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); - $date = $this->daysToDate($this->dateToDays($day-7,$month,$year),"%Y%m%d"); + $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day-7,$month,$year),"%Y%m%d"); $next_week_year = substr($date,0,4); $next_week_month = substr($date,4,2); $next_week_day = substr($date,6,2); - $this_weekday = $this->dayOfWeek($next_week_day,$next_week_month,$next_week_year); + $this_weekday = Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year); - $beginOfWeek = ($this->dateToDays($next_week_day,$next_week_month,$next_week_year) - - ($this_weekday - $this->begin_weekday)); + $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year) + - ($this_weekday - DATE_CALC_BEGIN_WEEKDAY)); - return($this->daysToDate($beginOfWeek,$format)); + return(Date_Calc::daysToDate($beginOfWeek,$format)); } // end func beginOfPrevWeek @@ -893,21 +1010,21 @@ function getCalendarWeek($day="",$month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $week_array = array(); // date for the column of week - $curr_day = ($this->dateToDays($day,$month,$year) - - (($this->dayOfWeek($day,$month,$year) - $this->begin_weekday))); + $curr_day = (Date_Calc::dateToDays($day,$month,$year) + - ((Date_Calc::dayOfWeek($day,$month,$year) - DATE_CALC_BEGIN_WEEKDAY))); for($counter=0; $counter <= 6; $counter++) { - $week_array[$counter] = $this->daysToDate($curr_day,$format); + $week_array[$counter] = Date_Calc::daysToDate($curr_day,$format); $curr_day++; } @@ -931,25 +1048,25 @@ function getCalendarMonth($month="",$year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); $month_array = array(); // date for the first row, first column of calendar month - $curr_day = ($this->dateToDays("01",$month,$year) - - $this->firstOfMonthWeekday("01",$month,$year) + $this->begin_weekday); + $curr_day = (Date_Calc::dateToDays("01",$month,$year) + - Date_Calc::firstOfMonthWeekday("01",$month,$year) + DATE_CALC_BEGIN_WEEKDAY); // number of days in this month - $daysInMonth = $this->daysInMonth($month,$year); + $daysInMonth = Date_Calc::daysInMonth($month,$year); - $weeksInMonth = $this->weeksInMonth($month,$year); + $weeksInMonth = Date_Calc::weeksInMonth($month,$year); for($row_counter=0; $row_counter < $weeksInMonth; $row_counter++) { for($column_counter=0; $column_counter <= 6; $column_counter++) { - $month_array[$row_counter][$column_counter] = $this->daysToDate($curr_day,$format); + $month_array[$row_counter][$column_counter] = Date_Calc::daysToDate($curr_day,$format); $curr_day++; } } @@ -973,14 +1090,14 @@ function getCalendarYear($year="",$format="%Y%m%d") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); $year_array = array(); for($curr_month=0; $curr_month <=11; $curr_month++) { - $year_array[$curr_month] = $this->getCalendarMonth(sprintf("%02d",$curr_month+1),$year,$format); + $year_array[$curr_month] = Date_Calc::getCalendarMonth(sprintf("%02d",$curr_month+1),$year,$format); /* for ($x=0; $x< count($year_array[$curr_month]); $x++) { @@ -1077,7 +1194,7 @@ $century = sprintf("%02d",$century); $year = sprintf("%02d",$year); - return($this->dateFormat($day,$month,$century.$year,$format)); + return(Date_Calc::dateFormat($day,$month,$century.$year,$format)); } // end func daysToDate @@ -1102,15 +1219,15 @@ $month = sprintf("%02d",$month); $DOW1day = sprintf("%02d",(($occurance - 1) * 7 + 1)); - $DOW1 = $this->dayOfWeek($month,$year,$DOW1day); + $DOW1 = Date_Calc::dayOfWeek($month,$year,$DOW1day); $wdate = ($occurance - 1) * 7 + 1 + (7 + $dayOfWeek - $DOW1) % 7; - if( $wdate > $this->daysInMonth($month,$year)) + if( $wdate > Date_Calc::daysInMonth($month,$year)) return -1; else - return($this->dateFormat($month,$year,$wdate,$format)); + return(Date_Calc::dateFormat($month,$year,$wdate,$format)); } // end func NWeekdayOfMonth @@ -1155,11 +1272,11 @@ function dateFormat($day,$month,$year,$format) { - if(!$this->isValidDate($day,$month,$year)) + if(!Date_Calc::isValidDate($day,$month,$year)) { - $year = $this->dateNow("%Y"); - $month = $this->dateNow("%m"); - $day = $this->dateNow("%d"); + $year = Date_Calc::dateNow("%Y"); + $month = Date_Calc::dateNow("%m"); + $day = Date_Calc::dateNow("%d"); } $output = ""; @@ -1173,16 +1290,16 @@ switch($nextchar) { case "a": - $output .= $this->getWeekdayAbbrname($day,$month,$year); + $output .= Date_Calc::getWeekdayAbbrname($day,$month,$year); break; case "A": - $output .= $this->getWeekdayFullname($day,$month,$year); + $output .= Date_Calc::getWeekdayFullname($day,$month,$year); break; case "b": - $output .= $this->getMonthAbbrname($month); + $output .= Date_Calc::getMonthAbbrname($month); break; case "B": - $output .= $this->getMonthFullname($month); + $output .= Date_Calc::getMonthFullname($month); break; case "d": $output .= sprintf("%02d",$day); @@ -1191,10 +1308,10 @@ $output .= $day; break; case "E": - $output .= $this->dateToDays($day,$month,$year); + $output .= Date_Calc::dateToDays($day,$month,$year); break; case "j": - $output .= $this->julianDate($day,$month,$year); + $output .= Date_Calc::julianDate($day,$month,$year); break; case "m": $output .= sprintf("%02d",$month); @@ -1206,10 +1323,10 @@ $output .= "\t"; break; case "w": - $output .= $this->dayOfWeek($day,$month,$year); + $output .= Date_Calc::dayOfWeek($day,$month,$year); break; case "U": - $output .= $this->weekOfYear($day,$month,$year); + $output .= Date_Calc::weekOfYear($day,$month,$year); break; case "y": $output .= substr($year,2,2); @@ -1244,7 +1361,7 @@ function getYear() { - return $this->dateNow("%Y"); + return Date_Calc::dateNow("%Y"); } // end func getYear @@ -1258,7 +1375,7 @@ function getMonth() { - return $this->dateNow("%m"); + return Date_Calc::dateNow("%m"); } // end func getMonth @@ -1272,7 +1389,7 @@ function getDay() { - return $this->dateNow("%d"); + return Date_Calc::dateNow("%d"); } // end func getDay @@ -1289,7 +1406,7 @@ function getMonthFullname($month) { if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); $month_names = array("January","February","March","April","May","June", "July","August","September","October","November","December"); @@ -1312,7 +1429,7 @@ function getMonthAbbrname($month,$length=3) { if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); $month_names = array("January","February","March","April","May","June", "July","August","September","October","November","December"); @@ -1336,15 +1453,15 @@ function getWeekdayFullname($day="",$month="",$year="") { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $weekday_names = array("Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday"); - $weekday = $this->dayOfWeek($day,$month,$year); + $weekday = Date_Calc::dayOfWeek($day,$month,$year); return $weekday_names[$weekday]; @@ -1366,16 +1483,16 @@ function getWeekdayAbbrname($day="",$month="",$year="",$length=3) { if(empty($year)) - $year = $this->dateNow("%Y"); + $year = Date_Calc::dateNow("%Y"); if(empty($month)) - $month = $this->dateNow("%m"); + $month = Date_Calc::dateNow("%m"); if(empty($day)) - $day = $this->dateNow("%d"); + $day = Date_Calc::dateNow("%d"); $weekday_names = array("Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday"); - $weekday = $this->dayOfWeek($day,$month,$year); + $weekday = Date_Calc::dayOfWeek($day,$month,$year); return substr($weekday_names[$weekday],0,$length);