在PHP 5.2中是否有与DateTime :: diff()等效的函数?
我的本地服务器是PHP 5.3并使用DateTime :: diff().然后我发现我的实时网站使用PHP 5.2并给出错误.
Fatal error: Call to undefined method DateTime::diff() in /var/www/some/other/dir/web/daikon/modules/projects/views/admin/log/admin_log_list.php on line 40
PHP代码:
 foreach ($logs as $key => $list){
 ...
 // show date in European way dd-mm-yyyy not in MySQL way yyyy-mm-dd
    $newdate =new DateTime($list['date']) ;
    echo "<td class=\"left\" width=\"8%\">".$newdate->format('d-m-Y')."</td>\n";
    $starttime = new DateTime($list['start_time']);
    echo "<td width=\"7%\">".date_format($starttime, 'H:i')."</td>\n";
    $finishtime = new DateTime($list['finish_time']);
    echo "<td width=\"8%\">".date_format($finishtime, 'H:i')."</td>\n";
    $timediff = 0;
    $interval = $starttime->diff($finishtime);
    $hours   = $interval->format('%h');
    $minutes = $interval->format('%i');
    $timediff = $hours * 60 + $minutes;
Chr*_*lay 40
Spudley的答案对我不起作用 - 从我的系统中减去任何DateTime给出0.
通过使用带有'U'说明符的DateTime :: format(自Unix纪元以来的秒数),我能够使它工作:
$start = new DateTime('2010-10-12');
$end = new DateTime();
$days = round(($end->format('U') - $start->format('U')) / (60*60*24));
这适用于我的开发系统(5.3.4)和我的部署系统(5.2.11).
我只是需要(不幸的是)一个WordPress插件.这个我在2次使用该功能:
在我的类中调用- > diff()(我的类扩展了DateTime,所以$ this是引用DateTime)
function diff ($secondDate){
    $firstDateTimeStamp = $this->format("U");
    $secondDateTimeStamp = $secondDate->format("U");
    $rv = ($secondDateTimeStamp - $firstDateTimeStamp);
    $di = new DateInterval($rv);
    return $di;
}
然后我重新创建了一个假的DateInterval类(因为DateInterval仅在PHP> = 5.3中有效),如下所示:
Class DateInterval {
    /* Properties */
    public $y = 0;
    public $m = 0;
    public $d = 0;
    public $h = 0;
    public $i = 0;
    public $s = 0;
    /* Methods */
    public function __construct ( $time_to_convert /** in seconds */) {
        $FULL_YEAR = 60*60*24*365.25;
        $FULL_MONTH = 60*60*24*(365.25/12);
        $FULL_DAY = 60*60*24;
        $FULL_HOUR = 60*60;
        $FULL_MINUTE = 60;
        $FULL_SECOND = 1;
//        $time_to_convert = 176559;
        $seconds = 0;
        $minutes = 0;
        $hours = 0;
        $days = 0;
        $months = 0;
        $years = 0;
        while($time_to_convert >= $FULL_YEAR) {
            $years ++;
            $time_to_convert = $time_to_convert - $FULL_YEAR;
        }
        while($time_to_convert >= $FULL_MONTH) {
            $months ++;
            $time_to_convert = $time_to_convert - $FULL_MONTH;
        }
        while($time_to_convert >= $FULL_DAY) {
            $days ++;
            $time_to_convert = $time_to_convert - $FULL_DAY;
        }
        while($time_to_convert >= $FULL_HOUR) {
            $hours++;
            $time_to_convert = $time_to_convert - $FULL_HOUR;
        }
        while($time_to_convert >= $FULL_MINUTE) {
            $minutes++;
            $time_to_convert = $time_to_convert - $FULL_MINUTE;
        }
        $seconds = $time_to_convert; // remaining seconds
        $this->y = $years;
        $this->m = $months;
        $this->d = $days;
        $this->h = $hours;
        $this->i = $minutes;
        $this->s = $seconds;
    }
}
希望能帮到别人.
是的,令人烦恼的是 PHP5.2 中没有这个功能。
我假设你不能升级到5.3?你应该调查一下;没有什么理由不升级;但我认为无论出于何种原因你都不能这样做。
第一个提示:如果您只需要小于 24 小时的差异,您可以简单地减去两个时间戳,然后执行$time_diff = date('H:i:s',$subtracted_value);
如果您要做的差异超过 24 小时,但只需返回天数和时间差就可以了,您可以通过对减去的值进行模数计算来扩展上述技术,并针对一天的秒数(即24*60*60,即86400)
$subtracted_value = $date1 - $date2;
$days_diff = $subtracted_value % 86400;
$time_diff = date('H:i:s',$subtracted_value);
如果你需要几周的时间,你当然可以这样做$days_diff % 7。
不幸的是,手动技术在几周后就会崩溃,因为月和年的长度是可变的(从技术上讲,考虑到夏令时,天也是可变的,但你可能可以忽略这一点,特别是因为你只会出去一小时,在最多),但希望这足以让您开始。