PHP - date modify返回负微秒

u91tlkcl  于 2023-06-04  发布在  PHP
关注(0)|答案(1)|浏览(126)

看来我很少得到一个负微秒的日期时间。
$next_datetime = date_create()->modify('-500 ms')->format("Y-m-d H:i:s.u");
//输出“2023-05-30 18:57:50.-99999”
运行PHP 8.1
有人能解释一下吗?

更新

这似乎只发生在修改参数为负毫秒时。当datetime微秒设置为1时,就会发生这种情况。

$datetime_before = date_create('now');

        $datetime_before->setTime(1,1,1,1);

        $datetime_after  = clone($datetime_before);

        $datetime_after->modify('-100 ms');

        $string   = $datetime_after->format('Y-m-d H:i:s.u');

        if (str_contains($string, "-999")) {
            echo 'before: ';
            var_dump($datetime_before);
            echo PHP_EOL;

            echo 'after: ';
            var_dump($datetime_after);
            echo PHP_EOL;
            exit;
        }


输出量
before: object(DateTime)#51 (3) { ["date"]=> string(26) "2023-06-02 01:01:01.000001" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/London" } after: object(DateTime)#52 (3) { ["date"]=> string(26) "2023-06-02 01:01:01.-99999" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/London" }
示例:https://3v4l.org/YDEq2#v8.1.19

km0tfn4u

km0tfn4u1#

基于https://www.php.net/manual/en/datetime.formats.time.php,我认为你的时间格式是错误的。ms似乎不是支持格式的一部分。在你的情况下你需要压裂
我猜php会将其解释为月份和闰秒。

相关问题