Php';的新DateTime()在我的新服务器上不起作用


Php's new DateTime() is not working on my new server

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

    $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;

当我尝试回显结果时,它会返回一个空结果。

同样的代码在我的开发服务器和localhost上运行,当我换到另一台服务器时,它就停止了响应。

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

我将非常感谢您的帮助

检查/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;

注意:我建议您将所有内容都存储在数据库中的时间戳中,而不是日期中。在您的显示逻辑中,将其转换为日期,或查找其年龄等。请在Datetime vs timestamp上阅读这篇文章。我应该使用字段';日期时间';或者';时间戳';?

下面,找到两个函数来查找两个时间戳之间的时间差,以及获取旧时间戳与现在相比的年龄。

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

这会给你一天小时分秒的时间。修改下面的secondsToTime函数以获取其他内容。

使用以下函数。。。

function whatAge($old_time){
$current_time   =   getdate(time())[0];
$time_diff      =   $current_time-$old_time;
return secondsToTime($time_diff,'string');
}
function getDiff($time1, $time2){
$time_diff      =   $time1-$time2;
return secondsToTime($time_diff,'string');
}
function secondsToTime($inputSeconds, $return='array') {
/** https://stackoverflow.com/questions/8273804/convert-seconds-into-days-hours-minutes-and-seconds */
$secondsInAMinute = 60;
$secondsInAnHour  = 60 * $secondsInAMinute;
$secondsInADay    = 24 * $secondsInAnHour;
// extract days
$days = floor($inputSeconds / $secondsInADay);
// extract hours
$hourSeconds = $inputSeconds % $secondsInADay;
$hours = floor($hourSeconds / $secondsInAnHour);
// extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = floor($minuteSeconds / $secondsInAMinute);
// extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = ceil($remainingSeconds);
// return the final array
$obj    = array(
        'd' => (int) $days,
        'h' => (int) $hours,
        'm' => (int) $minutes,
        's' => (int) $seconds,
);
$str    =   function($d,$h,$m,$s){
    if($d>0){
        return "$d d, $h h $m m";
    }else{
        return "$h h $m m";
    }
};
switch ($return){
        case    'array'  :  return $obj;    break;
        case    'string' :  return $str($obj['d'],$obj['h'],$obj['m'],$obj['s']);   break;
    }
}

简单方法

试试这个:

$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]