Recipe 3.3 Converting Time and Date Parts to an Epoch Timestamp
3.3.1 Problem
You want to know
what epoch timestamp corresponds to a set of time and date parts.
3.3.2 Solution
Use mktime( ) if your time and date parts are in
the local time zone:
// 7:45:03 PM on March 10, 1975, local time
$then = mktime(19,45,3,3,10,1975);
Use gmmktime( ) if your time and date parts are in
GMT:
// 7:45:03 PM on March 10, 1975, in GMT
$then = gmmktime(19,45,3,3,10,1975);
Pass no arguments to get the current date and time in the local or
UTC time zone:
$now = mktime();
$now_utc = gmmktime();
3.3.3 Discussion
The functions mktime( ) and gmmktime(
) each take a date and time's parts (hour,
minute, second, month, day, year, DST flag) and return the
appropriate Unix epoch timestamp. The components are treated as local
time by mktime( ), while gmmktime(
) treats them as a date and time in UTC. For both
functions, a seventh argument, the DST
flag (1 if DST is being observed, 0 if not), is optional. These
functions return sensible results only for times within the epoch.
Most systems store epoch timestamps in a 32-bit signed integer, so
"within the epoch" means between
8:45:51 P.M. December 13, 1901 UTC and 3:14:07 A.M. January 19, 2038
UTC.
In the following example, $stamp_now is the epoch
timestamp when mktime( ) is called and
$stamp_future is the epoch timestamp for 3:25 P.M.
on June 4, 2012:
$stamp_now = mktime( );
$stamp_future = mktime(15,25,0,6,4,2012);
print $stamp_now;
print $stamp_future;
1028782421
1338837900
Both epoch timestamps can be fed back to strftime(
) to produce formatted time strings:
print strftime('%c',$stamp_now);
print strftime('%c',$stamp_future);
Thu Aug 8 00:53:41 2002
Mon Jun 4 15:25:00 2012
Because the previous calls to mktime( ) were made
on a computer set to EDT (which is four hours behind GMT), using
gmmktime( ) instead produces epoch timestamps that
are 14400 seconds (four hours) smaller:
$stamp_now = gmmktime( );
$stamp_future = gmmktime(15,25,0,6,4,2012);
print $stamp_now;
print $stamp_future;
1028768021
1338823500
Feeding these gmmktime( )-generated epoch
timestamps back to strftime( ) produces formatting
time strings that are also four hours earlier:
print strftime('%c',$stamp_now);
print strftime('%c',$stamp_future);
Wed Aug 7 20:53:41 2002
Mon Jun 4 11:25:00 2012
3.3.4 See Also
Recipe 3.4 for how to convert an epoch
timestamp back to time and date parts; documentation on
mktime( ) at
http://www.php.net/mktime and gmmktime(
) at
http://www.php.net/gmmktime.
|