需要能够使用超过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上使用它?
感谢
答案 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 Changelog5.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版本。