note 101879 deleted from function.mktime by danbrown
| From: | danbrown@php.net | Date: | Sat, 15 Jan 2011 16:01:23 +0000 |
| Subject: | note 101879 deleted from function.mktime by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-175785@lists.php.net to get a copy of this message | ||
Note Submitter: Ray.Paseur Gmail
----
This may or may not be a bug, but it illustrates something that can be counter-intuitive about
mktime(). PHP version 5.3.4. The script output is:
2010-11-30T00:00:00-05:00
2010-12-30T00:00:00-05:00
2011-01-30T00:00:00-05:00
2011-03-02T00:00:00-05:00
2011-04-02T01:00:00-04:00
2011-05-02T01:00:00-04:00
2010-11-30T00:00:00-05:00
2010-12-30T00:00:00-05:00
2011-01-30T00:00:00-05:00
2011-03-02T00:00:00-05:00
2011-04-02T00:00:00-04:00
2011-05-02T00:00:00-04:00
<?php // RAY_temp_pmsguy.php
error_reporting(E_ALL);
echo "<pre>";
// REQUIRED FOR PHP 5.1+
date_default_timezone_set('America/New_York');
// GET A CUTOFF DATE TO STOP THE ITERATORS
$future = date('c', strtotime('April 4, 2011'));
// SHOW THE STRTOTIME() RESULTS - NOT LOGICALLY CONSISTENT
// GET THE ISO-8601 DATE STRING A PRIOR MONTH END
$today = date('c', strtotime('November 30, 2010'));
echo PHP_EOL . $today;
// ITERATE OVER THE DAYS, TESTING FOR MONTH INTERVALS
while ($today < $future)
{
// NOTE THE CHANGE TO DAYLIGHT SAVING TIME
$today = date('c', strtotime($today . ' + 1 MONTH'));
echo PHP_EOL . $today;
}
echo PHP_EOL;
// SHOW THE MKTIME() RESULTS - ALSO NOT LOGICALLY CONSISTENT
// GET THE ISO-8601 DATE STRING A PRIOR MONTH END
$today = date('c', strtotime('November 30, 2010'));
echo PHP_EOL . $today;
// ITERATE OVER THE DAYS, TESTING FOR MONTH INTERVALS
while ($today < $future)
{
// ISOLATE THE DATE COMPONENTS
$s = strtotime($today);
$m = date('m', $s);
$d = date('d', $s);
$y = date('Y', $s);
// ADD ONE TO THE MONTH
$t = mktime(0,0,0, $m+1, $d, $y);
$today = date('c', $t);
echo PHP_EOL . $today;
}