Я пытаюсь получить это datetime: sub для работы. Что с этим не так?
PHP
//Calculate working hrs
$usr_stamp_in = new DateTime($row['usr_stamp_in']);
$usr_stamp_out = new DateTime($row['usr_stamp_out']);
$sum_time = $usr_stamp_in->diff($usr_stamp_out);
//Overtime
$tot_overtime = $sum_time;
$overtime = new DateTime($tot_overtime);
$overtime->sub(new DateInterval('T8H'));
$sum_time->format('%h tim %I min'); //Echo this will work
$overtime->format('%h'); //Echo this won't work
Из документов видно, что DateTime::diff
возвращает экземпляр DateInterval
:
// \/Return type\/
public DateInterval DateTimeInterface::diff ( DateTimeInterface $datetime2 [, bool $absolute = false ] )
метод DateInterval::format
работает с DateInterval::format
%<placeholder>
, это также рассматривается документами. Это объясняет, почему ваш $sum_overtime->format()
работает:
$sum_time->format('%h tim %I min');//%h is a valid DateInterval format
Однако $overtime
является экземпляром DateTime
, поэтому вам нужно отбросить %
в вашей строке формата и использовать правильный формат. Опять же, документы содержат всю необходимую информацию.
$overtime->format('G');//G is valid for DateTime, equivalent to %h in a DateInterval::format call
Спецификаторы формата для формата DateTime::format
перечислены в документации по функциям date