64位php时间戳问题

时间:2010-01-04 18:58:34

标签: php iis-6 64-bit windows-server-2003 timestamp

需要能够使用超过32位时间戳限制的日期,以便将我们的服务器升级到Windows Server 2003 64位版本。并运行PHP 5.2.5 64位。但是仍然不能使用超过32位限制的日期。

echo strtotime(“11-11-2050”);

什么都不返回。

使用C:\ WINDOWS \ system32 \ inetsrv \ fcgiext.dll在IIS 6.0上运行php

如果我错过了什么,请告诉我。找到Adodb Date Library,它将完成我需要的工作,但我更喜欢使用本机php函数,所以我不必修改现有的代码。

任何人都知道是否可以在64位Windows Server 2003上使用它?

感谢

5 个答案:

答案 0 :(得分:3)

使用DateTime类,因为它工作在32位和64位,并内置到php5x

http://us.php.net/manual/en/class.datetime.php

<?php

$dateTime = new DateTime("+200 years");


echo $dateTime->format("Y-m-d H:i:s");

?>

答案 1 :(得分:2)

据称这是在2008年修复的,如错误#44209所示。

  

derick@php.net说,

     

此错误已在CVS中修复。

     

来源的快照每三个小时打包一次;这种变化   将在下一个快照中。你可以抓住快照   http://snaps.php.net/

     

感谢您提供该报告,并帮助我们改进PHP。

答案 2 :(得分:1)

PHP在Win32上还没有使用64位time_t。

答案 3 :(得分:1)

最小化代码重写:

<?php    
function adodb_strtotime($str) {
   $dateTime = new DateTime($str);
    return $dateTime->format("U");
}
?>

然后添加这个类: http://phplens.com/phpeverywhere/adodb_date_library

然后只需在所有正常日期函数前添加adodb_。例如,mktime将是adodb_mktime

日期将是adodb_date

strtotime将是adodb_strtotime ...你明白了

答案 4 :(得分:0)

我刚刚在32位机器上尝试过此操作,并且使用var_dump返回false:

var_dump strtotime("11-11-2050");

echo返回任何内容,因为false不可显示。我注意到http://php.net/manual/en/function.strtotime.php

上的php Changelog
  

5.1.0现在失败时返回FALSE,而不是-1。

该页面底部的注释还说明了:

  

注意:时间戳的有效范围通常是从星期五,1901年12月13日20:45:54 UTC到星期二,2038年1月19日03:14:07 UTC。 (这些是与32位有符号整数的最小值和最大值相对应的日期。)此外,并非所有平台都支持负时间戳,因此您的日期范围可能不会早于Unix时期。这意味着,例如1970年1月1日之前的日期不适用于Windows,某些Linux发行版和一些其他操作系统。 PHP 5.1.0和更新的版本克服了这个限制。

所以我认为Windows即使是64位版本也可能使用带有PHP的32位整数。你安装了64位版本的php吗?

phpinfo()应该能够显示在系统行下运行的php版本。