mktime function not liking being negative
Moderator: General Moderators
- mrvanjohnson
- Forum Contributor
- Posts: 137
- Joined: Wed May 28, 2003 11:38 am
- Location: San Diego, CA
mktime function not liking being negative
Alright I know that the mktime function on Windows does not support negative time stamps. But my Unix boxes always have until now. I just migrated to a brand new server running PHP Version 4.3.10 on Red Hat and now it appears I have lost the function to work with mktime with a negative value, or basically anything before the date January 1, 1970. Has anyone else seen this problem and are there any good work arounds?
Using Slackware and PHP Version 4.3.11 it works (Win32 of course not):
Sounds wierd that it shouldn't on your end...
By the looks of the usercomment of php.net's mktime page, there seems to be various workaround. I think they are intended for the win32 enviroment, but if it really is broken on your end, why not try...
Update:
You should verify the glibc issue. I just remembered that I've read about this somewhere, and according to the bugreports on php.net...
Code: Select all
echo date("M-d-Y", mktime(0, 0, 0, 0, 0, 1970));By the looks of the usercomment of php.net's mktime page, there seems to be various workaround. I think they are intended for the win32 enviroment, but if it really is broken on your end, why not try...
Update:
You should verify the glibc issue. I just remembered that I've read about this somewhere, and according to the bugreports on php.net...
[4 May 2003 5:58am CEST] derick@php.net
But that's not a bug in PHP, but more in your glibcWhich version of
glibc do you use? AFAIK the 2.3.x series return an undefined value for
dates smaller than 1 - 1 - 1970, much like Windows does.
[4 May 2003 10:35am CEST] guy dot mersch at pandora dot be
the linux server uses glibc 2.2.5 stable
[4 May 2003 11:44am CEST] guy dot mersch at pandora dot be
There seems to be indeed a problem with glibc 2.2.5 and
the mktime function for dates earlier than 01/01/1970
It doesn't work for me either. I use the following as a replacement mktime(). Got it from a comment on php.net.
Code: Select all
function MakeTime() {
$objArgs = func_get_args();
$nCount = count($objArgs);
if ($nCount < 7)
{
$objDate = getdate();
if ($nCount < 1)
$objArgs[] = $objDate["hours"];
if ($nCount < 2)
$objArgs[] = $objDate["minutes"];
if ($nCount < 3)
$objArgs[] = $objDate["seconds"];
if ($nCount < 4)
$objArgs[] = $objDate["mon"];
if ($nCount < 5)
$objArgs[] = $objDate["mday"];
if ($nCount < 6)
$objArgs[] = $objDate["year"];
if ($nCount < 7)
$objArgs[] = -1;
}
$nYear = $objArgs[5];
$nOffset = 0;
if ($nYear < 1970)
{
if ($nYear < 1902)
return 0;
else if ($nYear < 1952)
{
$nOffset = -2650838400;
$objArgs[5] += 84;
// Apparently dates before 1942 were never DST
if ($nYear < 1942)
$objArgs[6] = 0;
}
else
{
$nOffset = -883612800;
$objArgs[5] += 28;
}
}
return call_user_func_array("mktime", $objArgs) + $nOffset;
}