Рассчитать разницу между двумя датами в часах и минутах

Я использую этот код для расчета разницы между двумя датами в часах и минутах:

$all = round(($date1timestamp - $date2timestamp) / 60); $d = floor ($all / 1440); $h = floor (($all - $d * 1440) / 60); $m = $all - ($d * 1440) - ($h * 60); 

Работает отлично, но когда мне нужно несколько раз рассчитать разницу между датами, я должен снова написать код и изменить значения, есть ли простой способ вычислить несколько раз, не переписывая код снова?

Пытаться:

Функция:

 function date_difference ($date1timestamp, $date2timestamp) { $all = round(($date1timestamp - $date2timestamp) / 60); $d = floor ($all / 1440); $h = floor (($all - $d * 1440) / 60); $m = $all - ($d * 1440) - ($h * 60); //Since you need just hours and mins return array('hours'=>$h, 'mins'=>$m); } 

Вызов функции:

 $result = date_difference($date1timestamp, $date2timestamp); 

Если я правильно вас понимаю, вам нужно инкапсулировать этот код в функцию, а затем вы можете вызывать функцию всякий раз, когда вам нужно использовать ее снова, а не переписывать ее.

 function dateDiffHoursMins($date1timestamp, $date2timestamp) { $all = round(($date1timestamp - $date2timestamp) / 60); $d = floor ($all / 1440); $h = floor (($all - $d * 1440) / 60); $m = $all - ($d * 1440) - ($h * 60); return array('d' => $d, 'h' => $h, 'm' => $m); } 

Чтобы использовать его, просто вызовите dateDiffHoursMins() и передайте ему две метки времени. Он вернет массив, чтобы вы могли захватить такие значения:

 $diff = dateDiffHoursMins($time1, $time2); $hours = $diff['h']; echo("Hours: " . $hours); 

Этот процесс инкапсулирования кода в функцию часто называется сохранением кода DRY, который является аббревиатурой, обозначающей Dont Repeat Yourself . Это цель, к которой вы всегда должны стремиться. Это делает код быстрее для записи и проще отлаживать. Представьте, если вы копировали / вставляли этот фрагмент 20 раз по всему файлу, а затем обнаруживали ошибку в нем. Вы должны были бы исправить это во всех 20 местах, тогда как с помощью функции вам нужно только исправить ее в одном месте.

Хороший способ сделать это – подумать об этом с точки зрения секунд.

Первым шагом будет вычесть разницу между метками времени в секундах в SQL ($ dbc – мое соединение с базой данных):

 $timeQuery= mysqli_query($dbc, "SELECT TIMESTAMPDIFF(second,TIME1,TIME2) AS DIFF, 

А затем назначьте это переменной

 while ($row = mysqli_fetch_array($timeQuery)) { $totalTime = $row["DIFF"]; 

И затем начните свои конверсии:

 //Seconds in an hour $unith =3600; //Seconds in a minute $unitm =60; //Number of hours and then the seconds remaining for minute calc $hh = intval($totalTime / $unith); $ss_remaining = ($totalTime - ($hh * 3600)); //Number of minutes and then the seconds remaing $mm = intval($ss_remaining / $unitm); $ss = ($ss_remaining - ($mm * 60)); 

И тогда вы можете распечатать его так:

 $hh . ' : ' . $mm . ' : ' . $ss