PHP Datetime Sub

0

Я пытаюсь получить это 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
  • 0
    Разве вы не задавали очень похожий вопрос уже в последние несколько часов?
  • 1
    Как это не работает? Какой результат вы получаете? Что вы ожидаете?
Показать ещё 4 комментария
Теги:

1 ответ

1
Лучший ответ

Из документов видно, что 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, поэтому вам нужно отбросить % в вашей строке формата и использовать правильный формат. Опять же, документы содержат всю необходимую информацию.

TL; TR Вам необходимо следующее:

$overtime->format('G');//G is valid for DateTime, equivalent to %h in a DateInterval::format call

Спецификаторы формата для формата DateTime::format перечислены в документации по функциям date

Ещё вопросы

Сообщество Overcoder
Наверх
Меню