Version: 0.1-beta
Type: Class
Category: Calendars/Dates
License: GNU General Public License
Description: This first version of the Date class is for evaluation. It performs date arithmetic such as difference between two dates, adding days/hours/week/minutes/seconds, etc…
This class needs enhancements for it cannot compute before 1970.
************CUT AND PASTE CODE AFTER THIS LINE TO dateclass_sample.php********* <?php //---dateclass_sample.php //---Description: Sample call to Date class //---Author: Edwin C. Villapando ([email protected]) //---Version: 0.1-beta //---Date: 2001-12-29 22:30 //---File: dateclass_sample.php include ("Date.class"); //---Instances of the Date class $dateSTR = new Date("2001-12-01"); //---passed with String date $date = new Date($dateSTR); //---passed with Date object $dateINT = new Date(time()); //---passed with timestamp/integer $dateNULL = new Date(); //---no parameter, default is current time //---variants $dateTIMEONLY = new Date("21:45"); //---passed with time only $dateDATETIME = new Date("2001-12-29 22:30"); //---passed with date and time $leapyear = new Date("2000-01-01"); $lastday = $date->lastdayofmonth(); $firstday = $date->firstdayofmonth(); echo "$date->CDATE is leapyear? = " . ($date->isleapyear() ? "Yes" : "No") . "n"; echo "$leapyear->CDATE is leapyear? = " . ($leapyear->isleapyear() ? "Yes" : "No") . "n"; $nextday = $date->dateadd(2); echo "2 day after $date->CDATE is $nextday->CDATEn"; echo "Days difference on lastday of $date->CDATE is " . $date->datediff($date->lastdayofmonth()) . " day(s)n"; echo "First day of $date->CDATE is $firstday->CDATEn"; echo "Last day of $date->CDATE is $lastday->CDATEn"; echo "Days difference between $date->CDATE and " . "$lastday->CDATE is " . $date->datediff($lastday) . " day(s) n"; $date->setdate($lastday); echo "nSet date to new value = $date->CDATEn"; $firstday->setdate($firstday->firstdayofyear()); $lastday->setdate($lastday->lastdayofyear()); echo "First date is $firstday->CDATEn"; echo "Last date is $lastday->CDATEn"; echo "nSample Time:nt$dateTIMEONLY = new Date("21:45");t$dateTIMEONLY->CTIMEn"; echo "t$dateDATETIME = new Date("2001-12-29 22:30");t$dateDATETIME->CTIMEn"; echo "nSome formatting:n"; echo "t$dateTIMEONLY = new Date("21:45");t" . $dateTIMEONLY->format("%I:%M:%S %p") . "n"; echo "t$dateDATETIME = new Date("2001-12-29 22:30");t" . $dateDATETIME->format("%I:%M:%S %p") . "n"; ?> ************END OF dateclass_sample.php DO NOT INCLUDE THIS LINE********* ************CUT AND PASTE CODE AFTER THIS LINE TO Date.class********* <?php //---Date.class //---Description: Date Class //---Author: Edwin C. Villapando ([email protected]) //---Version: 0.1-beta //---Date: 2001-12-29 22:30 //---File: Date.class class Date { //--- //---Date class variables //--- var $date; //---holds the actual date/time stamp var $SECONDS; //---"seconds" var $MINUTES; //---"minutes" var $HOURS; //---"hours" var $DAY; //---"mday" var $WEEKDAY; //---"wday" var $CWEEKDAY; //---"weekday" var $MONTH; //---"mon" var $YEAR; //---"year" var $DAYOFYEAR; //---"yday" var $CMONTH; //---"month" var $CDATE; //---date rep. of $date "1970-01-01" var $CTIME; //---time rep. of $date "11:30:45" //---end of Date class variables //--- //---Date class methods //--- function Date($date = NULL) { //--- Date class constructor //---populate the properties with values $this->init_date(getdate($this->eval_dparm($date))); } //---end of Date class constructor function eval_dparm($date) { //---Evaluate a date parameter and return a date/time stamp if (is_string($date)) { if (($date == "") || strtotime($date) == -1) { //---String Date is passed but evaluates to non-date/time. $tmpdate = time(); } else { //---Convert string date to date/time stamp $tmpdate = strtotime($date); } } elseif (is_null($date)) { //---default to current date $tmpdate = time(); } elseif (is_numeric($date)) { //---numeric date is passed $tmpdate = $date; } else { if (get_class($date) == "date") { //---The passed parameter is a Date class //---so, get the $obj->date property $tmpdate = $date->date; } else { //---Catch anything else, return current date $tmpdate = time(); } } return $tmpdate; } //---end of eval_dparm function init_date($date_arr) { //---Initialize the properties $this->date = $date_arr[0]; $this->SECONDS = $date_arr["seconds"]; $this->MINUTES = $date_arr["minutes"]; $this->HOURS = $date_arr["hours"]; $this->DAY = $date_arr["mday"]; $this->WEEKDAY = $date_arr["wday"]; $this->CWEEKDAY = $date_arr["weekday"]; $this->MONTH = $date_arr["mon"]; $this->YEAR = $date_arr["year"]; $this->DAYOFYEAR = $date_arr["yday"]; $this->CMONTH = $date_arr["month"]; $this->CDATE = $this->format("%Y-%m-%d"); $this->CTIME = $this->format("%H:%M:%S"); } //---end of init_date() function isleapyear() { //----Determine if the current Date object is a leap year return (($this->YEAR % 4) == 0); } //---end of isleapyear() function setdate($date = NULL) { //---Change the current date value of the Date object with new one //---without destroying the current Date object. Useful on loops $this->init_date(getdate($this->eval_dparm($date))); } //---end of setdate() function format($format = "%Y-%m-%d %H:%M:%S") { //---String format the Date object //---Use strftime() format mask //---default return value format "1970-01-01 11:30:45" return strftime($format, $this->date); } //---end of format() function datediff($date, $elaps = "d") { //--- //---Returns number of weeks/days/hours/minutes/seconds //---between two dates/time. Default is "d" days to return //--- //---Legend ($elaps): //--- //--- w - weeks //--- d - days //--- h - hours //--- m - minutes //--- s - seconds //--- $__DAYS_PER_WEEK__ = (7); $__HOURS_IN_A_DAY__ = (24); $__MINUTES_IN_A_DAY__ = (1440); $__SECONDS_IN_A_DAY__ = (86400); //---Compute days elaps. This is the default return value $__DAYSELAPS = ($this->eval_dparm($date) - $this->date) / $__SECONDS_IN_A_DAY__ ; switch ($elaps) { case "w": //---Convert it to weeks $__DAYSELAPS = $__DAYSELAPS / $__DAYS_PER_WEEK__; break; case "h": //---Convert it to hours $__DAYSELAPS = $__DAYSELAPS * $__HOURS_IN_A_DAY__; break; case "m": //---Convert it to minutes $__DAYSELAPS = $__DAYSELAPS * $__MINUTES_IN_A_DAY__; break; case "s": //---Convert it to seconds $__DAYSELAPS = $__DAYSELAPS * $__SECONDS_IN_A_DAY__; break; } return $__DAYSELAPS; } //---end of datediff() function firstdayofmonth() { //---Returns a Date object representating the first day of the //---month of the current Date object //--- return (new Date(strftime("%Y-%m-%d", mktime(0, 0, 0, $this->MONTH, 1, //---1 always the 1st day $this->YEAR)))); } //---end of firstdayofmonth() function firstdayofyear() { //---Returns a Date object representating the first day of the //---year of the current Date object //--- return (new Date(strftime("%Y-%m-%d", mktime(0, 0, 0, 1, //---1 always the 1st month 1, //---1 always the 1st day $this->YEAR)))); } //---end of firstdayofyear() function lastdayofmonth() { //---Returns a Date object representating the last day of the //---month of the current Date object //--- return (new Date(strftime("%Y-%m-%d", mktime(0, 0, 0, $this->MONTH + 1, //---next month 0, //---1-1=0 is the last day of the $this->YEAR)))); //---current month } //---end of lastdayofmonth() function lastdayofyear() { //---Returns a Date object representating the last day of the //---year of the current Date object //--- return (new Date(strftime("%Y-%m-%d", mktime(0, 0, 0, 1, //---January 0, //---1-1=0 is the last day $this->YEAR + 1)))); //---next year } //---end of lastdayofyear() function dateadd($number = 0, $interval = "d") { //---Returns Date object upon adding $interval/$number to //---current Date object. $number is the number to add //--- //---Legend ($interval): //--- //--- yyyy - year //--- q - quarter //--- m - month //--- y - day of year //--- d - day (default with $number = 0) //--- w - weekday //--- ww - week of year //--- h - hour //--- n - minute //--- s - second //--- $hours = $this->HOURS; $minutes = $this->MINUTES; $seconds = $this->SECONDS; $month = $this->MONTH; $day = $this->DAY; $year = $this->YEAR; switch ($interval) { case "yyyy": //---Add $number to year $year += $number; break; case "q": //---Add $number to quarter $year += ($number*3); break; case "m": //---Add $number to month $month += $number; break; case "y": case "d": case "w": //---Add $number to day of year, day, day of week $day += $number; break; case "ww": //---Add $number to week $day += ($number*7); break; case "h": //---Add $number to hours $hours += $number; break; case "n": //---Add $number to minutes $minutes += $number; break; case "s": //---Add $number to seconds $seconds += $number; break; } return (new Date(mktime($hours, $minutes, $seconds, $month, $day, $year))); } //---end of dateadd() //---end of Date class methods } //---end of Date class ?> ************END OF Date.class DO NOT INCLUDE THIS LINE*********