Я использую этот код для расчета разницы между двумя датами в часах и минутах:
$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