使用日期和strtotime PHP时的奇怪结果

时间:2015-04-24 09:57:52

标签: php codeigniter date strtotime

我正在我的项目中进行一些日期转换,在开发环境中,代码按预期工作,但在生产环境中,它提供了有线结果。

在数据库中,当日期值为0000-00-00时,就会发生这种情况。

代码

$db_pricedate  = date('dmy', strtotime($row_country_price["pricedate"]));

Dev中的结果 - 010170

产品结果 - 3011-1

这真的很奇怪,代码和数据库完全相同。

任何建议。请帮忙 。提前谢谢

两台服务器都有PHP 5.3.3版

4 个答案:

答案 0 :(得分:0)

可能来自本地配置?

尝试在date()set_local('LC_TIME', 'en');

之前添加此内容

答案 1 :(得分:0)

如果我没错?

您在Dev计算机上有 32位系统,而在生产服务器上有 64位系统。

你得到奇怪结果的原因是

strtotime("0000-00-00 00:00:00");

返回

int(-62170005200) // on 64 bit system
false // on 32 bit system

这使得进一步的操作不同。

注意:仅适用于 PHP> = 5.3 ,我尚未检查PHP 5.2 + 64位系统(它返回false AFAIK)。

答案 2 :(得分:0)

这是因为您的产品的时区不同。服务器&开发服务器。您可以通过更改dev server / mysql服务器时区来解决此问题。

要查看你的mysql服务器tiemzone试试这个(假设你使用的是mysql)

SELECT @@system_time_zone;

如果在更改mysql服务器时区时出现问题,您可以在脚本中更改时区。

如果问题仍未解决,请使用以下

 $date = DateTime::createFromFormat("Y-d-m", "0000-00-00");
 echo $date->format("dmy");

它必须在dev& amp;具有相同结果的prod服务器(已测试)。保证

由于

答案 3 :(得分:-1)

PHP date()convert 0000-00-00转入01011970试试这个

if($row_country_price["pricedate"]!= "0000-00-00"){
   $db_pricedate  = date('dmy', strtotime($row_country_price["pricedate"]));
}else{
   $db_pricedate  = $row_country_price["pricedate"];
}