Как создать доли секунды DateInterval в PHP? Например:
0.123456 se c
?
interval_spe c из DateInterval :: __ construct
не имеет F
и f
аналогично DateInterval :: format , который поддерживает разделенные секунды.
Относительный список форматов из DateInterval :: createFromDateString также не упоминает о какой-либо дробной части c.
Но в списке свойств класса DateInterval показано:
f Количество микросекунд в долях секунды.
Мне удалось получить DateInterval за доли секунды, используя DateTime :: diff двух DateTimes с разделенными секундами
пример:
$formatStr = 'Y-m-d H:i:s.u';
$dateTimeStr = '2000-01-01 00:00:00.0';
$timeZone = new \DateTimeZone('UTC');
$timerDateTimeStart = \DateTimeImmutable::createFromFormat($formatStr, $dateTimeStr, $timeZone);
$formatStr = 'Y-m-d H:i:s.u';
$dateTimeStr = '2000-01-01 00:00:00.123456';
$timeZone = new \DateTimeZone('UTC');
$timerDateTimeEnd = \DateTimeImmutable::createFromFormat($formatStr, $dateTimeStr, $timeZone);
$timerDiff = $timerDateTimeStart->diff($timerDateTimeEnd);
$intervalStr = $timerDiff->format('%Y-%M-%D %H:%I:%S.%f');
echo 'Interval (yyyy-mm-dd hh:mm:ss.sfract): ' . $intervalStr;
дает:
Interval (yyyy-mm-dd hh:mm:ss.sfract): 00-00-00 00:00:00.123456
, поскольку DateTime поддерживает долю секунды time_format в своем конструкторе и DateTime: : createFromFormat понимает
u Микросекунды (до шести цифр) Пример: 45, 654321
Кстати: не думаете ли вы, что u
в случае работы с DateTime
и F
или f
в случае DateInterval
может сделать ваш день немного менее скучным?
Одним из моих решений может быть создание двух DateTime
с точностью до доли секунды, а затем diff
, чтобы получить DateInterval
с той же точностью до доли секунды, но я хотел бы получить тот же результат с только DateInterval.
Знаете ли вы, как создать DateInterval
с 0.123456 sec
, используя только DateInterval
?
Решение на основе принятого ответа:
$dateInterval = DateInterval::createFromDateString("1 day, 2 hours, 3 minutes, 1 second, 123456 microsecond");
$intervalStr = $dateInterval->format('%D %H:%I:%S.%F');
echo 'Interval (dd hh:mm:ss.sfract): ' . $intervalStr . PHP_EOL;
дает:
Interval (dd hh:mm:ss.sfract): 01 02:03:01.123456