cvs: php4 /pear/Date Calc.php Calendar.php

From: Date: Sat, 14 Oct 2000 20:51:30 +0000
Subject: cvs: php4 /pear/Date Calc.php Calendar.php
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-2051@lists.php.net to get a copy of this message
mohrt Sat Oct 14 13:51:30 2000 EDT Added files: /php4/pear/Date Calc.php Removed files: /php4/pear/Date Calendar.php Log: renamed to Calc.php, fixed small bug in end_of_prev_month() Index: php4/pear/Date/Calc.php +++ php4/pear/Date/Calc.php <?php /** * Date_Calc is a calendar class used to calculate and * manipulate calendar dates and retrieve dates in a calendar * format. It does not rely on 32-bit system date stamps, so * you can display calendars and compare dates that date * pre 1970 and post 2038. * * This source file is subject to version 2.02 of the PHP license, * that is bundled with this package in the file LICENSE, and is * available at through the world-wide-web at * http://www.php.net/license/2_02.txt. * If you did not receive a copy of the PHP license and are unable to * obtain it through the world-wide-web, please send a note to * license@php.net so we can mail you a copy immediately. * * Copyright (c) 1999, 2000 ispi * * @access public * * @version 1.0.1 * @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.0 * @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. * * @param string the strftime() format to return the date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string the current date in specified format */ function date_now($format="%Y%m%d") { return(strftime($format,time())); } // end func date_now /** * Returns true for valid date, false for invalid date. * * @param string year in format CCYY * @param string month in format MM * @param string day in format DD * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return boolean true/false */ function is_valid_date($year, $month, $day) { if(empty($year) || empty($month) || empty($day)) return false; // must be digits only if(preg_match("/\D/",$year)) return false; if(preg_match("/\D/",$month)) return false; if(preg_match("/\D/",$day)) return false; if($year < 0 || $year > 9999) return false; if($month < 1 || $month > 12) return false; if($day < 1 || $day > 31 || $day > $this->days_in_month($month)) return false; return true; } // end func is_valid_date function is_leap_year($year="") { if(empty($year)) $year = $this->date_now("%Y"); if(strlen($year) != 4) return false; if(preg_match("/\D/",$year)) return false; return (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0); } // end func is_leap_year /** * Determines if given date is a future date from now. * * @param string year in format CCYY * @param string month in format MM * @param string day in format DD * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return boolean true/false */ function is_future_date($year,$month,$day) { $this_year = $this->date_now("%Y"); $this_month = $this->date_now("%m"); $this_day = $this->date_now("%d"); if($year > $this_year) return true; elseif($year == $this_year) if($month > $this_month) return true; elseif($month == $this_month) if($day > $this_day) return true; return false; } // end func is_future_date /** * Determines if given date is a past date from now. * * @param string year in format CCYY * @param string month in format MM * @param string day in format DD * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return boolean true/false */ function is_past_date($year,$month,$day) { $this_year = $this->date_now("%Y"); $this_month = $this->date_now("%m"); $this_day = $this->date_now("%d"); if($year < $this_year) return true; elseif($year == $this_year) if($month < $this_month) return true; elseif($month == $this_month) if($day < $this_day) return true; return false; } // end func is_past_date /** * Returns day of week for given date, 0=Sunday * * @param string year in format CCYY, default is current local year * @param string month in format MM, default is current local month * @param string day in format DD, default is current local day * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return int $weekday_number */ function day_of_week($year="",$month="",$day="") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } if($month > 2) $month -= 2; else { $month += 10; $year--; } $day = ( floor((13 * $month - 1) / 5) + $day + ($year % 100) + floor(($year % 100) / 4) + floor(($year / 100) / 4) - 2 * floor($year / 100) + 77); $weekday_number = (($day - 7 * floor($day / 7))); return $weekday_number; } // end func day_of_week /** * Returns week of the year, first Sunday is first day of first week * * @param string year in format CCYY * @param string month in format MM * @param string day in format DD * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return integer $week_number */ function week_of_year($year,$month,$day) { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%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->julian_date($year,$month,$day) + floor(($week_day + 4) % 7)) / 7); return $week_number; } // end func week_of_year /** * Returns number of days since 31 December of year before given date. * * @param string year in format CCYY, default is current local year * @param string month in format MM, default is current local month * @param string day in format DD, default is current local day * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return int $julian */ function julian_date($year="",$month="",$day="") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $days = array(0,31,59,90,120,151,181,212,243,273,304,334); $julian = ($days[$month - 1] + $day); if($month > 2 && $this->is_leap_year($year)) $julian++; return($julian); } // end func julian_date /** * Returns quarter of the year for given date * * @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 * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return int $year_quarter */ function quarter_of_year($year="",$month="",$day="") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $year_quarter = (intval(($month - 1) / 3 + 1)); return $year_quarter; } // end func quarter_of_year /** * Returns date of begin of next month of given date. * * @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 * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function begin_of_next_month($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } if($month < 12) { $month++; $day=1; } else { $year++; $month=1; $day=1; } return $this->date_format($year,$month,$day,$format); } // end func begin_of_next_month /** * Returns date of the last day of next month of given date. * * @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 * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function end_of_next_month($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $day = $this->days_in_month($month); if($month < 12) { $month++; } else { $year++; $month=1; } return $this->date_format($year,$month,$day,$format); } // end func end_of_next_month /** * Returns date of the first day of previous month of given date. * * @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 * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function begin_of_prev_month($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } if($month > 1) { $month--; $day=1; } else { $year--; $month=12; $day=1; } return $this->date_format($year,$month,$day,$format); } // end func begin_of_prev_month /** * Returns date of the last day of previous month for given date. * * @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 * @version 1.0b * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function end_of_prev_month($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $day = $this->days_in_month($month); if($month > 1) { $month--; } else { $year--; $month=12; } return $this->date_format($year,$month,$day,$format); } // end func end_of_prev_month /** * Returns date of the next weekday of given date, * skipping from Friday to Monday. * * @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 * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function next_weekday($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $days = $this->date_to_days($year,$month,$day); if($this->day_of_week($year,$month,$day) == 5) $days += 3; elseif($this->day_of_week($year,$month,$day) == 6) $days += 2; else $days += 1; return($this->days_to_date($days,$format)); } // end func next_weekday /** * Returns date of the previous weekday, * skipping from Monday to Friday. * * @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 * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function prev_weekday($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $days = $this->date_to_days($year,$month,$day); if($this->day_of_week($year,$month,$day) == 1) $days -= 3; elseif($this->day_of_week($year,$month,$day) == 0) $days -= 2; else $days -= 1; return($this->days_to_date($days,$format)); } // end func prev_weekday /** * Returns date of day after given date. * * @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 * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function next_day($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $days = $this->date_to_days($year,$month,$day); return($this->days_to_date($days + 1,$format)); } // end func next_day /** * Returns date of day before given date. * * @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 * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function prev_day($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $days = $this->date_to_days($year,$month,$day); return($this->days_to_date($days - 1,$format)); } // end func prev_day /** * Sets century for 2 digit year. * 51-99 is 19, else 20 * * @param string 2 digit year * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string 4 digit year */ function default_century($year) { if(strlen($year) == 1) $year = "0$year"; if($year > 50) return( "19$year" ); else return( "20$year" ); } // end func default_century /** * Returns number of days between two given dates. * * @param string year in format CCYY * @param string month in format MM * @param string day in format DD * @param string year in format CCYY * @param string month in format MM * @param string day in format DD * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return int absolute number of days between dates, * -1 if there is an error. */ function date_diff($year1,$month1,$day1,$year2,$month2,$day2) { if(!$this->is_valid_date($year1,$month1,$day1)) return -1; if(!$this->is_valid_date($year2,$month2,$day2)) return -1; return(abs(($this->date_to_days($year1,$month1,$day1)) - ($this->date_to_days($year2,$month2,$day2)))); } // end func date_diff /** * Find the number of days in the given month. * * @param string month in format MM, default current local month * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return int number of days */ function days_in_month($month="") { if(empty($month)) $month = $this->date_now("%m"); if($month == 2) { if($this->is_leap_year($year)) return 29; else return 28; } elseif($month == 4 or $month == 6 or $month == 9 or $month == 11) return 30; else return 31; } // end func days_in_month /** * Find the day of the week for the first of the month of given date. * * @param string year in format CCYY, default to current local year * @param string month in format MM, default to current local month * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return int number of weekday for the first day, 0=Sunday */ function first_of_month_weekday($year="",$month="") { if(empty($year) || empty($month)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); } return($this->day_of_week($year,$month,"01")); } // end func first_of_month_weekday /** * Return date of first day of month of given date. * * @param string year in format CCYY, default current local year * @param string month in format MM, default current local month * @param string format for returned date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function begin_of_month($year="",$month="",$format="%Y%m%d") { if(empty($year) || empty($month)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); } return($this->date_format($year,$month,"01",$format)); } // end of func begin_of_month /** * Find the month day of the beginning of week for given date, * using $this->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 * @param string day in format DD, default current local day * @param string format for returned date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function begin_of_week($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $this_weekday = $this->day_of_week($year,$month,$day); $begin_of_week = ($this->date_to_days($year,$month,$day) - ($this_weekday - $this->begin_weekday)); return($this->days_to_date($begin_of_week,$format)); } // end of func begin_of_week /** * Find the month day of the end of week for given date, * using $this->begin_weekday. (can return weekday * of following month.) * * @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 * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function end_of_week($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $this_weekday = $this->day_of_week($year,$month,$day); $last_day_of_week = ($this->date_to_days($year,$month,$day) + (6 - $this_weekday + $this->begin_weekday)); return($this->days_to_date($last_day_of_week,$format)); } // end func end_of_week /** * Find the month day of the beginning of week after given date, * using $this->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 * @param string day in format DD, default current local day * @param string format for returned date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function begin_of_next_week($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $date = $this->days_to_date($this->date_to_days($year,$month,$day+7),"%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->day_of_week($next_week_year,$next_week_month,$next_week_day); $begin_of_week = ($this->date_to_days($next_week_year,$next_week_month,$next_week_day) - ($this_weekday - $this->begin_weekday)); return($this->days_to_date($begin_of_week,$format)); } // end func begin_of_next_week /** * Find the month day of the beginning of week before given date, * using $this->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 * @param string day in format DD, default current local day * @param string format for returned date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function begin_of_prev_week($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $date = $this->days_to_date($this->date_to_days($year,$month,$day-7),"%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->day_of_week($next_week_year,$next_week_month,$next_week_day); $begin_of_week = ($this->date_to_days($next_week_year,$next_week_month,$next_week_day) - ($this_weekday - $this->begin_weekday)); return($this->days_to_date($begin_of_week,$format)); } // end func begin_of_prev_week /** * Return an array with days in week * * @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 * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return array $week[$weekday] */ function get_calendar_week($year="",$month="",$day="",$format="%Y%m%d") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $week_array = array(); // date for the column of week $curr_day = ($this->date_to_days($year,$month,$day) - (($this->day_of_week($year,$month,$day) - $this->begin_weekday))); for($counter=0; $counter <= 6; $counter++) { $week_array[$counter] = $this->days_to_date($curr_day,$format); $curr_day++; } return $week_array; } // end func get_calendar_week /** * Return a set of arrays to construct a calendar month for * the given date. * * @param string year in format CCYY, default current local year * @param string month in format MM, default current local month * @param string format for returned date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return array $month[$row][$col] */ function get_calendar_month($year="",$month="",$format="%Y%m%d") { if(empty($year) || empty($month)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); } $month_array = array(); // date for the first row, first column of calendar month $curr_day = ($this->date_to_days($year,$month,"01") - $this->first_of_month_weekday($year,$month,"01") + $this->begin_weekday); // number of days in this month $days_in_month = $this->days_in_month($month); for($row_counter=0; $row_counter <= 5; $row_counter++) { for($column_counter=0; $column_counter <= 6; $column_counter++) { $month_array[$row_counter][$column_counter] = $this->days_to_date($curr_day,$format); $curr_day++; } } return $month_array; } // end func get_calendar_month /** * Return a set of arrays to construct a calendar year for * the given date. * * @param string year in format CCYY, default current local year * @param string format for returned date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return array $year[$month][$row][$col] */ function get_calendar_year($year="",$format="%Y%m%d") { if(empty($year)) $year = $this->date_now("%Y"); $year_array = array(); for($curr_month=0; $curr_month <=11; $curr_month++) { $year_array[$curr_month] = $this->get_calendar_month($year,sprintf("%02d",$curr_month+1),$format); /* for ($x=0; $x< count($year_array[$curr_month]); $x++) { for($y=0; $y< count($year_array[$curr_month][$x]); $y++) { echo "DEBUG: $x,$y:".$year_array[$curr_month][$x][$y]."<br>\n"; } } */ } return $year_array; } // end func get_calendar_year /** * Converts a date to number of days since a * distant unspecified epoch. * * @param string year in format CCYY * @param string month in format MM * @param string day in format DD * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return integer number of days */ function date_to_days($year,$month,$day) { $century = substr($year,0,2); $year = substr($year,2,2); if($month > 2) $month -= 3; else { $month += 9; if($year) $year--; else { $year = 99; $century --; } } return ( floor(( 146097 * $century) / 4 ) + floor(( 1461 * $year) / 4 ) + floor(( 153 * $month + 2) / 5 ) + $day + 1721119); } // end func date_to_days /** * Converts number of days to a distant unspecified epoch. * * @param int number of days * @param string format for returned date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in specified format */ function days_to_date($days,$format="%Y%m%d") { $days -= 1721119; $century = floor(( 4 * $days - 1) / 146097); $days = floor(4 * $days - 1 - 146097 * $century); $day = floor($days / 4); $year = floor(( 4 * $day + 3) / 1461); $day = floor(4 * $day + 3 - 1461 * $year); $day = floor(($day + 4) / 4); $month = floor(( 5 * $day - 3) / 153); $day = floor(5 * $day - 3 - 153 * $month); $day = floor(($day + 5) / 5); if($month < 10) $month +=3; else { $month -=9; if($year++ == 99) { $year = 0; $century++; } } $century = sprintf("%02d",$century); $year = sprintf("%02d",$year); return($this->date_format($century.$year,$month,$day,$format)); } // end func days_to_date /** * Calculates the date of the Nth weekday of the month, * such as the second Saturday of January 2000. * * @param string occurance: 1=first, 2=second, 3=third, etc. * @param string day_of_week: 0=Sunday, 1=Monday, etc. * @param string year in format CCYY * @param string month in format MM * @param string format for returned date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function N_weekday_of_month($occurance,$day_of_week,$year,$month,$format="%Y%m%d") { $year = sprintf("%04d",$year); $month = sprintf("%02d",$month); $DOW1day = sprintf("%02d",(($occurance - 1) * 7 + 1)); $DOW1 = $this->day_of_week($year.$month.$DOW1day); $wdate = ($occurance - 1) * 7 + 1 + (7 + $day_of_week - $DOW1) % 7; if( $wdate > $this->days_in_month($date)) return -1; else return($this->date_format($year,$month,$wdate,$format)); } // end func N_weekday_of_month /** * Formats the date in the given format, much like * strfmt(). This function is used to alleviate the * problem with 32-bit numbers for dates pre 1970 * or post 2038, as strfmt() has on most systems. * Most of the formatting options are compatible. * * formatting options: * * %a abbreviated weekday name (Sun, Mon, Tue) * %A full weekday name (Sunday, Monday, Tuesday) * %b abbreviated month name (Jan, Feb, Mar) * %B full month name (January, February, March) * %d day of month (range 00 to 31) * %e day of month, single digit (range 0 to 31) * %E number of days since unspecified epoch (integer) * (%E is useful for passing a date in a URL as * an integer value. Then simply use * days_to_date() to convert back to a date.) * %j day of year (range 001 to 366) * %m month as decimal number (range 1 to 12) * %n newline character (\n) * %t tab character (\t) * %w weekday as decimal (0 = Sunday) * %U week number of current year, first sunday as first week * %y year as decimal (range 00 to 99) * %Y year as decimal including century (range 0000 to 9999) * %% literal '%' * * @param string year in format CCYY * @param string month in format MM * @param string day in format DD * @param string format for returned date * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string date in given format */ function date_format($year,$month,$day,$format) { if(!$this->is_valid_date($year,$month,$day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $output = ""; for($strpos = 0; $strpos < strlen($format); $strpos++) { $char = substr($format,$strpos,1); if($char == "%") { $nextchar = substr($format,$strpos + 1,1); switch($nextchar) { case "a": $output .= $this->get_weekday_abbrname($year,$month,$day); break; case "A": $output .= $this->get_weekday_fullname($year,$month,$day); break; case "b": $output .= $this->get_month_abbrname($month); break; case "B": $output .= $this->get_month_fullname($month); break; case "d": $output .= sprintf("%02d",$day); break; case "e": $output .= $day; break; case "E": $output .= $this->date_to_days($year,$month,$day); break; case "j": $output .= $this->julian_date($year,$month,$day); break; case "m": $output .= sprintf("%02d",$month); break; case "n": $output .= "\n"; break; case "t": $output .= "\t"; break; case "w": $output .= $this->day_of_week($year,$month,$day); break; case "U": $output .= $this->week_of_year($year,$month,$day); break; case "y": $output .= substr($year,2,2); break; case "Y": $output .= $year; break; case "%": $output .= "%"; break; default: $output .= $char.$nextchar; } $strpos++; } else { $output .= $char; } } return $output; } // end func date_format /** * Returns the current local year in format CCYY * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string year in format CCYY */ function get_year() { return $this->date_now("%Y"); } // end func get_year /** * Returns the current local month in format MM * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string month in format MM */ function get_month() { return $this->date_now("%m"); } // end func get_month /** * Returns the current local day in format DD * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string day in format DD */ function get_day() { return $this->date_now("%d"); } // end func get_day /** * Returns the full month name for the given month * * @param string month in format MM * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string full month name */ function get_month_fullname($month) { if(empty($month)) $month = $this->date_now("%m"); $month_names = array("January","February","March","April","May","June", "July","August","September","October","November","December"); return $month_names[($month - 1)]; } // end func get_month_fullname /** * Returns the abbreviated month name for the given month * * @param string month in format MM * @param int optional length of abbreviation, default is 3 * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string abbreviated month name */ function get_month_abbrname($month,$length=3) { if(empty($month)) $month = $this->date_now("%m"); $month_names = array("January","February","March","April","May","June", "July","August","September","October","November","December"); return substr($month_names[($month - 1)],0,$length); } // end func get_month_abbrname /** * Returns the full weekday name for the given date * * @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 * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string full month name */ function get_weekday_fullname($year="",$month="",$day="") { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $weekday_names = array("Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday"); $weekday = $this->day_of_week($year,$month,$day); return $weekday_names[$weekday]; } // end func get_weekday_fullname /** * Returns the abbreviated weekday name for the given date * * @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 int optional length of abbreviation, default is 3 * * @access public * @version 1.0 * @author Monte Ohrt <monte@ispi.net> * * @return string full month name */ function get_weekday_abbrname($year="",$month="",$day="",$length=3) { if(empty($year) || empty($month) || empty($day)) { $year = $this->date_now("%Y"); $month = $this->date_now("%m"); $day = $this->date_now("%d"); } $weekday_names = array("Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday"); $weekday = $this->day_of_week($year,$month,$date); return substr($weekday_names[$weekday],0,$length); } // end func get_weekday_fullname } // end class Date_calendar ?>

« previous php.cvs (#2051) next »