Version: 1.1.1.2
Type: Class
Category: Calendars/Dates
License: GNU General Public License
Description: This class can be set by timestamp or year,month&day. Methods include: * set methods as described above * get methods for year, month, day of month * equals( <other DateObj> ) - checks if the the other nstance has the same date * getNextDay() - retuens a DateObj instance with the date of the following day * getNextMonth(), getNextYear() - returns a DateObj instance with the date a month after this one or a year after this one * diff( <other DateObj> [, <unit>] ) - returns the difference between the timestamps of this instance and the other, measured in the given unit. * toString( [<format>] ) - returns a string represting the date it has. uses the date() function to format this string.
<?php
/*
file: dateUtils.php
Author: Yaron Yogev (yyogev@excite.com)
17/01/2001 Yaron Yogev
File Created
*/
// constants for date arithmetic using Unix timestamp
// time is measured in seconds since the Epoch
$oneMinute = 60 ;
$oneHour = 60 * $oneMinute ;
$oneDay = 24 * $oneHour ;
$oneYear = 365.25 * $oneDay ;
/*
Class: DateObj
Description:
- Holds a represntation of a date.
- Allows setting the date by year, month and date or by timestamp.
- Provides methods for getting the parts of the date in the instance
and for getting the date one day, one month or one year after it.
Methods:
* constructor - DateObj()
- input: NONE
- side effects: sets this instance to the current system time
* setDate( $year, $month, $day )
- sets the date contained in this instance to the specified values
* setTimestamp( $newTimestamp )
- sets the date in this instance using the specified Unix timestamp
* getYear(), getMonth(), getDayOfMonth()
- return the numeric values of the date represented in this instance
* equals( $other )
- comapres the year, month and date with another DateObj instance
- if all are equal, returns true, otherwise returns false
* getNextDay()
- returns the date following the one in this instance
* getNextMonth()
- returns the date one month after the date i this instance
- if the day of month for this instance is bigger than
the number of days in the next month,
it returns the last day of the next month.
* getNextYear()
- returns the date one year from now
- if this is a leap year and we're on February 29th, returns March 1st
* diff( $other [, $unit ] )
- returns the difference between the dates in this instance and $other
- the value is not rounded, e.g. you may get a return value of 2.812.
so manipulate it later it as needed.
- valid units are: "year", "day", "hour", "minute", "seconds"
- default unit is "day"
- if $other is later, the result will be negative
* toString( $format )
- returns a string representing the date in the instance,
as created by the date() function using the given format
* echoData()
- for debugging: prints an HTML remark with the data of the instance
*/
class DateObj
{
var $timestamp ;
var $dateArray ;
// constructor - uses current time
function DateObj()
{
$this->setTimestamp( time() ) ;
} // end constructor
// set date - allows to set the date stored in this DateObj
function setDate( $year, $month, $day )
{
$this->setTimestamp( mktime(
0, // hour
0, // minute
0, // second
$month,
$day,
$year ) ) ;
} // end function setDate
function setDateFromDb( $dateVal )
{
// parse a date value that was read through ODBC
$parts = explode( " ", $dateVal ) ;
$datePart = $parts[0] ;
$timePart = $parts[1] ;
$dateParts = explode( "-", $datePart ) ;
$timeParts = explode( ":", $timePart ) ;
$year = $dateParts[0] ;
$month = $dateParts[1] ;
$day = $dateParts[2] ;
$hour = $timeParts[0] ;
$minute = $timeParts[1] ;
$second = $timeParts[2] ;
$this->setTimestamp( mktime(
$hour,
$minute,
$second,
$month,
$day,
$year ) ) ;
} // end function setDateFromDb
// set the date according to a timestamp
function setTimestamp( $newTimestamp )
{
$this->timestamp = $newTimestamp ;
$this->dateArray= getdate( $this->timestamp ) ;
}
// "get" methods
function getYear()
{
return $this->dateArray["year"] ;
}
function getMonth()
{
return $this->dateArray["mon"] ;
}
function getDayOfMonth()
{
return $this->dateArray["mday"] ;
}
function equals( $other )
{
if ( ( $this->getYear() == $other->getYear() ) &&
( $this->getMonth() == $other->getMonth() ) &&
( $this->getDayOfMonth() == $other->getDayOfMonth() ) )
{
return true ;
}
return false ;
} // end function equals
// get a new DateObj instance containg the date of the day following the date in this one
function getNextDay()
{
global $oneDay ;
$nextDay = new DateObj() ;
$nextDayTimestamp = $this->timestamp + $oneDay ;
$nextDay->setTimestamp( $nextDayTimestamp ) ;
return $nextDay ;
} // end function getNextDay
function setToPrevDay()
{
global $oneDay ;
$nextDay = new DateObj() ;
$nextDayTimestamp = $this->timestamp - $oneDay ;
$this->setTimestamp( $nextDayTimestamp ) ;
} // end function getNextDay
// get the date a month from the one in this object
// if the current day of month is more than the number of days
// in the next month, it returns the last day of the next month
function getNextMonth()
{
$nextMonth = new DateObj() ;
if ( $this->getMonth() == 12 )
{
$nextMonth->setDate(
$this->getYear()+1,
1,
$this->getDayOfMonth() ) ;
}
else
{
$year = $this->getYear() ;
$month = $this->getMonth() + 1 ;
$day = $this->getDayOfMonth() ;
while ( ! checkdate( $month, $day, $year ) )
{
$day-- ;
}
$nextMonth->setDate( $year, $month, $day ) ;
}
return $nextMonth ;
} // end function getNextMonth
// return the date one year after the date contained in this instance
function getNextYear()
{
$newDate = new DateObj() ;
if ( ( $this->getMonth() == 2 ) && ( $this->getDayOfMonth() == 29 ) )
{
// this is a leap year, and we're on February
$newDate->setDate(
$this->getYear()+1,
3,
1 ) ;
}
else
{
$newDate->setDate(
$this->getYear()+1,
$this->getMonth(),
$this->getDayOfMonth() ) ;
}
return $newDate ;
} // end function getNextYear
// print HTML remark with a debug message with contents of object
function echoData()
{
echo "
<!-- " .
"timestamp: " . $this->timestamp . ", " .
"year: " . $this->getYear() . ", " .
"month: " . $this->getMonth() . ", " .
"day: " . $this->getDayOfMonth() .
" -->" ;
} // end function echoData
// returns a string representing the date in the instance,
// as created by the date() function using the given format
function toString( $format = "d/m/Y" )
{
return date( $format, $this->timestamp ) ;
} // end function toString
// returns the difference between the dates in this instance and $other
// valid units are: "year", "day", "hour", "minute", "seconds"
// if $other is later, the result will be negative
function diff( $other, $unit = "day" )
{
global $oneMinute, $oneHour, $oneDay, $oneYear ;
if ( $unit == "minute" )
{
return ( $this->timestamp - $other->timestamp ) / $oneMinute ;
}
if ( $unit == "hour" )
{
return ( $this->timestamp - $other->timestamp ) / $oneHour ;
}
if ( $unit == "day" )
{
return ( $this->timestamp - $other->timestamp ) / $oneDay ;
}
if ( $unit == "year" )
{
return ( $this->timestamp - $other->timestamp ) / $oneYear ;
}
} // end function diff
function setToEndOfPervMonth()
{
// for the end date, get the last day of the previous month
$temp = new DateObj() ;
$this->setDate( $this->getYear(), $this->getMonth(), 1 ) ;
$this->setToPrevDay() ;
}
} // end of class Date
// end of file dateUtils.php
?>