Вычитание нескольких раз типов данных в php - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужно вычесть время данных 2 раза, чтобы получить окончательное время, я получил это «05:00» - «01:00» - «00:30».

$time1 = new dateTime('05:00'); $time2 = new dateTime('01:00'); $time3 = new dateTime('00:30'); $result = $time1->diff($time2);

и используя это, я мог бы извлечь разницу из $ time1 и $ time2, но тогда я не смогу использовать -> diff снова, потому что теперь это dateInterval.

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Возможным решением этой проблемы может быть использование экземпляров DateInterval напрямую с методом DateTime :: sub ().

$time1 = new DateTime();
$time2 = new DateInterval('PT5H');
$time3 = new DateInterval('PT30M');

$result = $time1
    ->sub($time2)
    ->sub($time3)
    ->format('Y-m-d H:i:s');

var_dump($result); // 2020-04-23 04:24:24 (5 hours and 30 minutes earlier)
0 голосов
/ 23 апреля 2020

Как насчет этого?

$time1 = '05:00';
$time2 = '01:00';
$time3 = '00:30';

function str_to_minutes($str) {
    $arr = explode(':', $str);
    return (int)$arr[0] * 60 + (int)$arr[1];
}

function minutes_to_str($min) {
    echo sprintf("%02d:%02d", $min / 60, $min % 60);
}
echo minutes_to_str(str_to_minutes($time1) - str_to_minutes($time2) - str_to_minutes($time3));
//03:30
0 голосов
/ 23 апреля 2020

Как указано в DateTime :: diff документах, он определяется как

DateTime::diff ( DateTimeInterface $datetime2 [, bool $absolute = FALSE ] ) : DateInterval и, следовательно, возвращает тип DateInterval.

Уже есть другие правильные ответы для достижения вычитания в PHP:

выяснение разницы между двумя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...