0

如何使下面的代码以小时为单位转换天数?

$timestart = date_create('02/11/2011' . $row->timestart); //$row->timestart returns time in 00:00:00 format
$timestop = date_create('02/11/2011' . $row->timestop); //$row->timestop returns time in 00:00:00 format

date_add($timestop, date_interval_create_from_date_string('2 days')); //add 2 days

$date_diff = date_diff($timestart, $timestop);

echo "Timespan: ";
echo $date_diff->format('%h hours');
echo "<br />";

我怎样才能得到hours:minutes:seconds过去的?我正在尝试保留该date_diff功能。

4

2 回答 2

6

date_diff() 的结果是DateInterval类的对象。这样的对象有一个非常有用的属性 - $days:它是开始日期和结束日期之间的总天数。此外,它以小时、分钟和秒为单位存储(作为其公共属性)差异。

所以,我想,你需要的只是从 $date_diff 变量中提取这些属性的值,然后添加24*$days到小时数。) 所有这些都可以包装成一个简单的函数:

function hms_date_diff(DateInterval $date_diff) {
  $total_days = $date_diff->days;
  $hours      = $date_diff->h;
  if ($total_days !== FALSE) {
    $hours += 24 * $total_days;
  }
  $minutes    = $date_diff->i;
  $seconds    = $date_diff->s;
  return sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);
}

至于 DateDiff::format,文档说...

DateInterval::format() 方法不会重新计算时间字符串或日期段中的结转点。

于 2012-06-16T20:00:28.297 回答
1

返回的DateInterval对象,date_diff分别存储每个时间段,秒,分钟,小时,天,月和年。

由于差异为 2 天,因此 hours 属性为 0,这就是您得到的。

于 2012-06-16T20:01:49.550 回答