Мне нужно добавить микросекунду к объекту Datetime в PHP. Я пытаюсь сделать это, добавляя интервал времени в доли секунды к Datetime, но он не работает.
$date = new Datetime('2018-06-05 09:06:46.7487');
$date->add(new DateInterval('PT0.00001S'));
echo $date->format('Y-m-d H:i:s.u');
Я не могу этого сделать, хотя думаю, что это должно быть просто. Как я могу добавить доли секунды в Datetime?
Если у вас есть PHP 7.1 или позже, это должно сделать это:
$date = new Datetime('2018-06-05 09:06:46.7487');
$date->modify('+1 microsecond');
echo $date->format('Y-m-d H:i:s.u');
Выход:
2018-06-05 09:06:46.748701
$date = new Datetime('2018-06-05 09:06:46.999999');
$date->modify('+1 microsecond');
echo $date->format('Y-m-d H:i:s.u');
Выход:
2018-06-05 09:06:46.1000000
Если у вас PHP 7.0 или более ранняя версия, вы можете извлечь микросекунды и выполнить математику самостоятельно «хакерским» способом:
$date = new Datetime('2018-06-05 09:06:46.7487');
// Use bcadd() to add .000001 seconds to the "microtime()" of the date
$microtime = bcadd( $date->getTimestamp().'.'.$date->format( 'u' ), '.000001', 6 );
// Reconstruct the date for consumption by __construct
$date->__construct(
date( 'Y-m-d H:i:s.', explode( '.', $microtime )[ 0 ] ).explode( '.', $microtime )[ 1 ]
);
echo $date->format('Y-m-d H:i:s.u');
Выход:
2018-06-05 09:06:46.748701
Хакерское решение также работает, если микросекунда .999999
$date = new Datetime('2018-06-05 09:06:46.999999');
// Use bcadd() to add .000001 seconds to the "microtime()" of the date
$microtime = bcadd( $date->getTimestamp().'.'.$date->format( 'u' ), '.000001', 6 );
// Reconstruct the date for consumption by __construct
$date->__construct(
date( 'Y-m-d H:i:s.', explode( '.', $microtime )[ 0 ] ).explode( '.', $microtime )[ 1 ]
);
echo $date->format('Y-m-d H:i:s.u');
Выход:
2018-06-05 09:06:47.000000
Других решений пока нет …