我试图在两个给定时间之间获得时间差异,例如第一次' 00:01'然后第二次' 47:25'这是我到目前为止所做的,
$start_time = "17:00:01";
$end_time = "17:47:25";
echo $start_time->diff($end_time);
但遗憾的是,似乎没有工作,有任何帮助,想法吗?
我的预期输出必须是,如果没有小时差异,但在分钟和秒钟之间存在差异," 22分钟和15秒",如果没有分钟差异但是有差别几个小时," 2小时和10秒"但如果只差几秒钟,那么,#34; 22秒"。
答案 0 :(得分:2)
php中的字符串不是对象,因此无法在其上调用diff
方法。
使用diff
方法,您必须将字符串更改为DateTime
对象。
如果您想在同一天比较时差,可以尝试:
$start_time = "17:00:01";
$end_time = "17:47:25";
$start_datetime = new DateTime(date('Y-m-d').' '.$start_time);
$end_datetime = new DateTime(date('Y-m-d').' '.$end_time);
var_dump($start_datetime->diff($end_datetime));
答案 1 :(得分:2)
就是这样。
<强> PHP 强>
$start_time = "17:00:01";
$end_time = "17:47:25";
$time1 = new DateTime($start_time);
$time2 = new DateTime($end_time);
$interval = $time1->diff($time2);
echo $hour = $interval->format('%h hour');
echo $min = $interval->format('%i min');
echo $sec = $interval->format('%s second');
<强>输出:强>
0 hour 47 min 24 sec
现在你可以添加一些条件并制作真实的格式。
答案 2 :(得分:1)
使用字符串函数的另一种方法:
/*
* Get difference in seconds between time formats
*/
function getDiff($start_time, $end_time)
{
$start_time = timeFormatToSeconds($start_time);
$end_time = timeFormatToSeconds($end_time);
if ($end_time > $start_time) {
return $end_time - $start_time;
}
return false;
}
/*
* Convert time format (HH:MM:SS) to seconds
*/
function timeFormatToSeconds($time_format)
{
sscanf($time_format, "%d:%d:%d", $hours, $minutes, $seconds);
return $hours * 3600 + $minutes * 60 + $seconds;
}
$start_time = "17:00:01";
$end_time = "17:47:25";
$diff = getDiff($start_time, $end_time);
if ($diff) {
$hours = floor($time / (60 * 60));
$time -= $hours * (60 * 60);
$minutes = floor($time / 60);
$time -= $minutes * 60;
$seconds = floor($time);
$time -= $seconds;
var_dump(array($hours, $minutes, $seconds));
}
答案 3 :(得分:1)
将字符串时间转换为时间戳并减去。将时间戳转换为所需的时间格式。
$start_time = strtotime('17:00:01');
$end_time = strtotime('17:47:25');
$diff = $end_time - $start_time;
echo date('H:i:s', $diff);
答案 4 :(得分:1)
两次相差
public function convTimeToMinutes($intime, $outtime)
{
$start = Carbon::parse($intime);
$end = Carbon::parse($outtime);
$minutes = $end->diffInMinutes($start); // 226
return $this->convertMinuteToHours($minutes);
}
public function convertMinuteToHours($minutes)
{
return $minutes / 60;
}
$totalHour = $this->convTimeToMinutes('09:25:35', '13:12:27');
//$totalHour = 3.76
答案 5 :(得分:0)
您可以将此类操作作为通用函数
private function calculateDiffInMinutes($from, $to)
{
$from = Carbon::createFromFormat('Y-m-d H:s:i', $from);
$to = Carbon::createFromFormat('Y-m-d H:s:i', $to);
return $to->diffInMinutes($from);
}
,您可以在任何地方调用该函数并传递所需的参数 在这里,现在和创建时间之间的区别
$this->calculateDiffInMinutes($item->created_at, now())
希望这对您有帮助