php - 在 PHP 中向 Datetime 对象添加一微秒

标签 php datetime php-7.0

我需要向 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');

虽然我认为它应该很简单,但我无法完成它。如何将几分之一秒添加到日期时间?

最佳答案

PHP >= 7.1 - 可以工作,但有一个错误!

如果你有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

Caution: this fails for .999999

$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 >= 5.2.0 “hack” 但不是 bug!

如果您有 PHP 7.0 或更早版本,那么您可以提取微秒并以“hacky”方式自己执行数学运算:

$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

,这个 hacky 解决方案也有效
$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

关于php - 在 PHP 中向 Datetime 对象添加一微秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720686/

相关文章:

php - 可数对象和不可数对象有什么区别

php - Laravel belongsToMany 仅返回特定列

带有特征的 PHP 命名空间问题

php - 如何检查变量是否与 fetch() 具有相同的值

java - 两次相加,一次是字符串,一次是HH :mm in java的日期

python - 'e' 是格式为 '%e %B %Y' 的错误指令

cmd - 使用 PHP 在 CLI/shell/终端中打印表情符号/外来字符

php - 当列具有相同名称时如何左连接

python - 使用 matplotlib 绘图时如何排序分类月份变量?

docker - 如何在 apache2 上使用 pthread?