Home arrow PHP arrow Page 6 - Date/Time Processing with PHP

Checking Up - PHP

Like most programming languages, PHP comes with a fairlyfull-featured API for date and time value manipulation. You've probablyused it in your applications, but never bothered to look too closely atit. Well, here's your chance to rectify that mistake - this articledelves into the date/time API in depth, uncovering some hidden nuggetsand demonstrating how it can be used to simplify date and timeprocessing in your PHP scripts.

TABLE OF CONTENTS:
  1. Date/Time Processing with PHP
  2. Getting A Date
  3. A Stamp In Time...
  4. Race Against Time
  5. When Looks Do Matter
  6. Checking Up
  7. Turning The Tables
By: The Disenchanted Developer, (c) Melonfire
Rating: starstarstarstarstar / 14
March 19, 2002

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement
Options to getdate() include the localtime() and gettimeofday() functions, both of which return arrays containing time information. Take a look:
<?
// get current time as array
$current = gettimeofday();
// print it
print_r($current);
?>
This would generate the following output:
Array
(
[sec] => 1014189678
[usec] => 900172
[minuteswest] => -19800
[dsttime] => 0
)
Alternatively, you can use the localtime() function, which calls the system's localtime() function and returns the output as an array containing information similar to that returned by getdate(). Take a look:
<?
// get current time as array
// the second parameter tells PHP to create an associative array // omit
it to create a regular integer-indexed array $current =
localtime(mktime(), TRUE);
// print it
print_r($current);
?>
Here's the output:
Array
(
[tm_sec] => 51
[tm_min] => 54
[tm_hour] => 12
[tm_mday] => 20
[tm_mon] => 1
[tm_year] => 102
[tm_wday] => 3
[tm_yday] => 50
[tm_isdst] => 0
)
It's unlikely that you'll ever use these, since most of what they provide is already available via the functions discussed previously. However, they're included here in case you ever have a need for this specialized information.

Finally, the checkdate() function tells you whether a given date is valid or not. Consider the following examples:
<?
// 31-Feb-2002 - false
echo checkdate(02, 31, 2002);
// 25-Dec-1956 - true
echo checkdate(12, 25, 1956);
// 31-Jun-2002 - false
echo checkdate(06, 31, 2002);
?>
This function comes in particularly handy if you need to validate date information entered into an online form - simply run the datestamp via checkdate() to see whether or not it's valid.{mospagebreak title=Back to Class} Now, how about doing something useful with all this information? This next example uses everything you've learned to construct a simple PHP class that prints a monthly calendar. Take a look:
<?
class Calendar
{
//
// class variables
//
// list of names for days and months
var $days = array("Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday");
var $months = array("", "January", "February", "March", "April",
"May", "June", "July", "August", "September", "October", "November",
"December");
// number of days in each month
var $totalDays = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30,
31, 30, 31);
// variables to hold current month, day and year
var $currYear;
var $currMonth;
var $currDay;
//
// class methods
// 
// constructor
function Calendar($year, $month)
{
// current values
$this->currYear = $year;
$this->currMonth =  $month;
$this->currDay = date("j");
// if leap year, modify $totalDays array appropriately
if (date("L", mktime(0, 0, 0, $this->currMonth, 1,
$this->currYear)))
{
$this->totalDays[2] = 29; 
}
}
// this prints the HTML code to display the calendar
function display()
{
// find out which day the first of the month falls on
$firstDayOfMonth = date("w", mktime(0, 0, 0,
$this->currMonth, 1, $this->currYear));
// start printing table
echo "<table border=0 cellpadding=2 cellspacing=5>\n";
// header
echo "<tr>\n";
echo "<td colspan=7 align=center><font face=Arial
size=-1><b>" . $this->months[$this->currMonth] . " " . $this->currYear .
"</b></font></td>\n";
echo "</tr>\n";
// day names
echo "<tr>\n";
for ($x=0; $x<7; $x++)
{ 
echo "<td><font face=Arial size=-2>" .
substr($this->days[$x],0,3) . "</font></td>\n"; 
}
echo "</tr>\n";
// start printing dates
echo "<tr>\n";
// display blank spaces until the first day of the month
for ($x=1; $x<=$firstDayOfMonth; $x++)
{
// this comes in handy to find the end of each
7-day block
$rowCount++;
echo "<td><font face=Arial
size=-2>&nbsp;</font></td>\n";
}
// counter to track the current date
$dayCount=1;
while ($dayCount <= $this->totalDays[$this->currMonth])
{
// use this to find out when the 7-day block is
complete and display a new row
if ($rowCount % 7 == 0)
{
echo "</tr>\n<tr>\n";
}
// print date
// if today, display in different colour
if ($dayCount == date("j") && $this->currYear ==
date("Y") && $this->currMonth == date("n"))
{
echo "<td align=center
bgcolor=Silver><font face=Arial size=-1>$dayCount</font>";
}
else
{
echo "<td align=center><font face=Arial
size=-1>$dayCount</font>";
}
echo "</td>\n";
// increment counters
$dayCount++;
$rowCount++;
}
echo "</tr>\n";
echo "</table>\n";
}
// end of class 
}
?>
Let's see how this works.

The first thing to do is set a few class variables to hold the month and year to be displayed - these variables will be used throughout the class, and are crucial to it functioning correctly.
<?
// list of names for days and months
var $days = array("Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday");
var $months = array("", "January", "February", "March", "April",
"May", "June", "July", "August", "September", "October", "November",
"December");
// number of days in each month
var $totalDays = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30,
31, 30, 31);
// variables to hold current month, day and year
var $currYear;
var $currMonth;
var $currDay;
?>
The values of the current year and month are set in the constructor, and are obtained via user input when an instance of the class is created.
<?
// current values
$this->currYear = $year;
$this->currMonth =  $month;
$this->currDay = date("j");
?>
The date() function even lets you find out if the year under consideration is a leap year - if it is, it's necessary to modify the $totalDays array for the month of February. Since the date() function only works on a correctly-formatted UNIX timestamp, the mktime() function is used to first convert the numeric month and year into an acceptable format.
<?
// if leap year, modify $totalDays array appropriately
if (date("L", mktime(0, 0, 0, $this->currMonth, 1,
$this->currYear)))
{
$this->totalDays[2] = 29; 
}
?>


 
 
>>> More PHP Articles          >>> More By The Disenchanted Developer, (c) Melonfire
 

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort
   

PHP ARTICLES

- Hackers Compromise PHP Sites to Launch Attac...
- Red Hat, Zend Form OpenShift PaaS Alliance
- PHP IDE News
- BCD, Zend Extend PHP Partnership
- PHP FAQ Highlight
- PHP Creator Didn't Set Out to Create a Langu...
- PHP Trends Revealed in Zend Study
- PHP: Best Methods for Running Scheduled Jobs
- PHP Array Functions: array_change_key_case
- PHP array_combine Function
- PHP array_chunk Function
- PHP Closures as View Helpers: Lazy-Loading F...
- Using PHP Closures as View Helpers
- PHP File and Operating System Program Execut...
- PHP: Effects of Wrapping Code in Class Const...

Developer Shed Affiliates

 


Dev Shed Tutorial Topics: