繁体   English   中英

与日期的PHP致命错误

[英]php fatal error with date

这是我的功能:

public static function GetFormattedMicroTime($timestamp = false) {
    if(!$timestamp)
        $timestamp = microtime(true);
    return DateTime::createFromFormat('U.u',sprintf('%.f', $timestamp))->format('Y-m-d\TH:i:s.u');
}

这就是我所说的(我只是从我的代码中的一个点调用它):

$microtime = microtime(true);
$sinceLastLog = number_format($microtime - self::$lastLogTime,4);
self::$lastLogTime = $microtime;
return Utils::GetFormattedMicroTime($microtime) .'|'. $sinceLastLog .'| blah blah';

而且我得到了很多:

PHP消息:PHP致命错误:在非对象上调用成员函数format()

任何人都可以帮我排除故障吗?

编辑:

我正在使用php-fpm 5.4.28

我改变了我的功能:

public static function GetFormattedMicroTime($timestamp = false) {
    if(!$timestamp)
        $timestamp = microtime(true);

    $d = DateTime::createFromFormat('U.u',sprintf('%.f', $timestamp));
    if ($d instanceof DateTime){
        return $d->format('Y-m-d\TH:i:s.u');
    } else {
        error_log("Erreur date ! timestamp = $timestamp erreur =".print_r(DateTime::getLastErrors(),true));
        return $timestamp;
    }
}

现在我进入nginx日志:

PHP message: Erreur date ! timestamp = 1403539343,372 erreur = Array
(
    [warning_count] => 0
    [warnings] => Array
        (
        )
    [error_count] => 2
    [errors] => Array
        (
            [10] => Unexpected data found.
        )
)

语言环境影响sprintf的输出。 显然,无论你从哪里得到这个错误都有一个使用逗号而不是小数点的区域设置来分隔整数和小数。 从本质上讲,它正在尝试这样做:

DateTime::createFromFormat('U.u','1403538707,536290')

createFromFormat只是将其视为小数点字符,而不是区域设置的小数点分隔符。

请尝试使用number_format

DateTime::createFromFormat('U.u', number_format($timestamp, 6, '.', ''));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM