2015-11-21 121 views
0

我想查找日期之间的时间间隔,小时功能在时间更改前一小时无法正常工作。我知道有一个答案部分回答了这个问题here。但它不会按小时来回答。日期之间的时间间隔(包括小时数)php

我有下面的PHP代码:

//helper function to pluralize words 
function pluralize($count, $text){ 
    return $count . (($count == 1) ? (" $text") : (" ${text}s")); 
} 

/** 
* Difference of dates 
* @param type $date1 DateTime first date 
* @param type $date2 DateTime second date 
* @return type string year, month, day, hour, minute, second 
*/ 
function timeDiff($date1, $date2){ 
    $string = ""; 
    $interval =$date1->diff($date2); 
    $suffix = ($interval->invert ? ' ago' : ''); 
    if ($v = $interval->y >= 1) $string .= pluralize($interval->y, 'year'). ', '; 
    if ($v = $interval->m >= 1) $string .= pluralize($interval->m, 'month'). ', '; 
    if ($v = $interval->d >= 1) $string .= pluralize($interval->d, 'day'). ', '; 
    if ($v = $interval->h >= 1) $string .= pluralize(($interval->h), 'hour') . ', '; 
    if ($v = $interval->i >= 1) $string .= pluralize($interval->i, 'minute'). ', '; 
    if ($v = $interval->i >= 1) $string .= pluralize($interval->s, 'second'). ' '; 
    return $string . $suffix; 
} 

我想下面的测试通过。

$date1 = new DateTime("2014-05-10 20:00:00"); 
$date2 = new DateTime("2015-11-20 19:45:00"); 

//This should produce "1 year, 6 months, 9 days, 23 hours, 45 minutes" 
//But it does produce "1 year, 6 months, 10 days, 45 minutes" 
timeDiff($date1, $date2); 

$date3 = new DateTime("2015-11-20 20:00:00"); 

//This should, and does produce "1 year, 6 months, 10 days" 
timeDiff($date1, $date3); 

这看起来像@John Conde在评论中指出的version issue。它已在新版本的PHP 5.4.24及更高版本中修复。我如何解决此问题以前版本的PHP?

+0

https://eval.in/473043 –

+0

你是说我的服务器做错了什么?这很有趣。有版本的PHP的一个已知的问题? – Whitecat

+1

[看起来像版本问题](https://3v4l.org/Kp26c) –

回答

1

我想你的要求是显示已用时间两个日期时间数据项之间的时间表示在您当地的时间。 (如果这不是您的要求,请更新您的问题)。

我也猜你的DateTime项目在当地时区正确创建。例如,您可以使用date_default_timezone_get()检查当地时区设置,并将其设置为date_default_timezone_set('Australia/Sydney')

操作服务器的人有可能错误地设置了服务器的默认时区,或者它位于您的某个其他时区。它也可能被设置为UTC(也称为Zulu或Z时间,以前称为格林威治标准时间或GMT)。在这种情况下,您需要在程序中明确设置本地时区。

一旦你的时区设置正确,创建你的DateTime项目。然后将两个DateTime项目转换为UTC。然后计算差异。像这样的事情应该做的伎俩。

$utczone = new DateTimeZone('UTC'); 
timeDiff($date1->setTimezone($utczone), $date2->setTimezone($utczone)); 
+0

这是PHP的版本。 – Whitecat

相关问题