В PHP 8.4 Marc Bennewitz добавил метод:
DateTimeImmutable::createFromTimestamp(int|float $timestamp): static
Для DateTime, конечно, тоже, но я не хочу лишний раз упоминать эту мутабельную дрянь.
Используя
float, можно создать объект времени с точностью до микросекунд:
$microtime = microtime(as_float: true);
$time = DateTimeImmutable::createFromTimestamp($microtime);
assert(sprintf('%.6f', $microtime) === $time->format('U.u'));
А теперь приятная новость: всё то же самое можно элементарно делать на PHP <8.4! С момента появления
DateTimeImmutable в PHP 5.5 его конструктор поддерживает формулу @<timestamp>, а с PHP 7.1 — @<timestamp>[.<µs>] (демо всех вариантов на всех версиях PHP):
$microtime = microtime(as_float: true);
$microtimeAsString = sprintf('%.6f', $microtime); // "1734088458.588154"
$dateTime = new DateTimeImmutable('@' . $microtimeAsString);
assert($microtimeAsString === $dateTime->format('U.u'));
Если часто этим пользуетесь, можете просто добавить себе в проект функцию а-ля PHP 8.4:
function createDateTimeFromTimestamp(int|float $timestamp): DateTimeImmutable
{
return new DateTimeImmutable(sprintf('@%.6f', $timestamp));
}