Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php';s new DateTime()在我的新服务器上不工作_Php_Datetime - Fatal编程技术网

Php';s new DateTime()在我的新服务器上不工作

Php';s new DateTime()在我的新服务器上不工作,php,datetime,Php,Datetime,我正在计算两个日期之间的时间间隔。这是我的代码 $start_date = new DateTime("$date1"); $end_date = new DateTime("$date2"); $interval = $start_date->diff($end_date); $days = $interval->d; $months = $interval->m; $years = $interval->y; $hours = $interval->h

我正在计算两个日期之间的时间间隔。这是我的代码

    $start_date = new DateTime("$date1");
$end_date = new DateTime("$date2");
$interval = $start_date->diff($end_date);

$days = $interval->d;
$months = $interval->m;
$years = $interval->y;
$hours = $interval->h;
$mins = $interval->i;
$secs = $interval->s;
当我尝试回显结果时,它返回一个空结果

这段代码也适用于我的开发服务器和本地主机,当我切换到另一台服务器时,它就停止了响应

我检查了php.ini的时区设置,很好


我将非常感谢你的帮助

简单的方法

试试这个:

$date1 = new DateTime("2007-03-24");
$date2 = new DateTime("2009-06-26");
$interval = $date1->diff($date2);
echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 

阅读更多[php DateTime::diff manual][1]

注意:我建议您将所有内容都存储在数据库的时间戳中,而不是存储在日期中。在你的显示逻辑中,把它转换成日期,或者找出它有多老,等等。读一下Datetime vs timestamp

下面,查找两个函数以查找两个时间戳之间的时间差,并获取旧时间戳与现在相比的时间

<?php  
echo whatAge(#SOME TIMESTAMP HERE#)
echo getDiff(#TIMESTAMP1, TIMESTAMP2#)
?>

检查/etc/php5/apache2/和/etc/php5/cli/文件夹中的php.ini文件。两个文件都必须声明默认时区,例如date.timezone=“America/New_York”

另一种方法是在创建DateTime对象之前在代码中声明它

date_default_timezone_set('America/New_York');
$start_date = new DateTime("$date1");
$end_date = new DateTime("$date2");
$interval = $start_date->diff($end_date);

$days = $interval->d;
$months = $interval->m;
$years = $interval->y;
$hours = $interval->h;
$mins = $interval->i;
$secs = $interval->s;

尝试删除$date1和$date1的“”双引号$date2@RakeshSharma:没关系,php会扩展这些,出于一些不好的原因…@Ramajaru.d:您在新服务器和开发环境中使用了哪些php版本?
$date1
$date2
的值是多少?@Rob这些值分别消耗2013-12-14 02:00:00和2013-12-14 01:00:00。是的,这是我在旧服务器上尝试的,在新服务器上同样不起作用。好主意。但是我的数据库有大量的数据。需要从下一次开始考虑时间戳。谢谢
date_default_timezone_set('America/New_York');
$start_date = new DateTime("$date1");
$end_date = new DateTime("$date2");
$interval = $start_date->diff($end_date);

$days = $interval->d;
$months = $interval->m;
$years = $interval->y;
$hours = $interval->h;
$mins = $interval->i;
$secs = $interval->s;