ID: 17123
Updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
-Status: Open
+Status: Closed
Bug Type: Date/time related
Operating System: WinNT5.0
PHP Version: 4.2.0
New Comment:
Fixed by documenting this.
Previous Comments:
------------------------------------------------------------------------
[2002-05-09 12:04:11] [EMAIL PROTECTED]
We've struggled with the fact that mktime(), strtotime(), localtime(),
etc. are broken for dates <1970 under Win32. Below is some PHP code
that shows how this might be worked around to generate (and use)
negative Unix timestamps under Windows. It would be nice if this idea
could be incorporated into all the timestamp functions (since we don't
want to have to rewrite something like strtotime() which is quite
essential for us in deciphering MSSQL datetime fields).
The concept is to fiddle dates before 1970 to be dates 56 years later
when supplying them to the broken Win32 native functions, and then
fiddle the results back to the correct values. This will ensure that
leap year counts are still correct and give dates on the correct days
of the week. The code below shows fiddling the generation of a full
timestamp (mktime()) and fiddling the interpretation of those full
timestamps (localtime()).
---------
$epoch2 = mktime(0,0,0,1,1,2026);
function mymktime($hr,$mi,$sc,$m,$d,$y) {
global $epoch2;
$fiddle = 0;
if($y <= 1970) { // Should be just < 1970, but this will help cope
with 0 month or 0 day
$fiddle = $epoch2;
$y = $y + 56;
}
return mktime($hr,$mi,$sc,$m,$d,$y) - $fiddle;
}
function mylocaltime($ts,$assoc) {
global $epoch2;
$fiddle = false;
if($ts < 0 && $ts != -1) {
$fiddle = true;
$ts += $epoch2;
}
$res = localtime($ts,$assoc);
if($fiddle)
$res[$assoc?"tm_year":5] -= 56;
return $res;
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=17123&edit=1