datetime — PHP сумма двух разных минут

у меня есть два разных перерыва

  1. время перерыва по умолчанию
  2. дополнительное время перерыва

здесь я хочу суммировать два раза и отображать формат 12 часов

EX:

$default_time = "00:30";
$extra_time   = "00:25";

мой ожидаемый результат: 00:55

но теперь дисплей 1:00

это мой код

$default_time = $work_data->break_time;
$break_time =  $work_data->extra_time;
$total_break = strtotime($default_time)+strtotime($break_time);
echo date("h:i",strtotime($total_break));

0

Решение

Вот функция, которую вы можете вычислить общее время, передавая аргументы в функции.

$ hours, $ min — предполагаемая переменная, равная нулю

$default_time = "00:30";
$break_time   = "00:25";
function calculate_total_time() {
$i = 0;
foreach(func_get_args() as $time) {
sscanf($time, '%d:%d', $hour, $min);
$i += $hour * 60 + $min;
}

if( $h = floor($i / 60) ) {
$i %= 60;
}

return sprintf('%02d:%02d', $h, $i);
}

// use example
echo calculate_total_time($default_time, $break_time); # 00:55
2

Другие решения

Существует один вызов функции для strtotime функционировать слишком много.

Вы должны оставить strtotime() позвоните в последней строке, так как $total_break уже есть метка времени UNIX:

$total_break = strtotime($default_time)+strtotime($break_time);
echo date("h:i",$total_break);
0

Проблема в том, что вы пытаетесь добавить слишком конкретные временные метки, но то, что вы пытаетесь достичь, это добавить две длительности. Поэтому вам нужно конвертировать эти временные метки в длительности. Для этого вам нужна база, которая в вашем случае составляет 00:00.

$base = strtotime("00:00");

$default_time = $work_data->break_time;
$default_timestamp = strtotime($default_time);
$default_duration = $default_timestamp - $base; // Duration in seconds

$break_time =  $work_data->extra_time;
$break_timestamp = strtotime($break_time);
$break_duration = $break_timestamp - $base; // Duration in seconds

$total_break = $default_duration + $break_duration; // 55 min in seconds

// If you want to calculate the timestamp 00:55, just add the base back to it
echo date("H:i", $base + $total_break);
0

Рассмотрите возможность использования стандартных DateTime а также DateInterval классы. Все, что вам нужно, это преобразовать значение вашей второй переменной в interval_spec формат (см. http://php.net/manual/en/dateinterval.construct.php для деталей):

$defaultTime = "00:30";
$breakTime = "PT00H25M"; // Or just 'PT25M'

$totalBreak = (new DateTime($defaultTime))->add($breakTime);
echo $totalBreak->format('H:i');
0

Вы можете попробовать следующий фрагмент кода:

$time1 = explode(":", $default_time);
$time2 = explode(":", $break_time);
$fulltime = ($time1[0] + $time2[0]) * 60 + $time1[1] + $time2[1];
echo (int)($fulltime / 60) . ":" . ($fulltime % 60);
0
<?php
$time = "00:30";
$time2 = "00:25";

$secs = strtotime($time2)-strtotime("00:00:00");
$result = date("H:i:s",strtotime($time)+$secs);
print_r($result);
?>
0

Используйте приведенный ниже код, вы обязательно получите свои ответы.

$default_time = "00:30:00";
$extra_time = "00:25:00";

$secs = strtotime($extra_time)-strtotime("00:00:00");
$result = date("H:i:s A",strtotime($default_time)+$secs);
echo $result;die;

Вы можете изменить приведенный выше код в соответствии с вашими потребностями.

0

Вы можете попробовать следующее:

$default_time = $work_data->break_time;
$date_start = new DateTime($default_time);
$break_time =  $work_data->extra_time;
$interval = new DateInterval("PT" . str_replace(":", "H", $break_time) . "M");
$date_end = $date_start->add($interval);
echo $date_end->format("H:i");

Обратите внимание, что это не учитывает времена, которые охватывают 24-часовой период

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector