带有日期的 php fatal error

标签 php datetime

这是我的功能:

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 message: PHP Fatal error: Call to a member function format() on a non-object

谁能帮我解决问题?

编辑:

我正在使用 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, '.', ''));

关于带有日期的 php fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24369834/

相关文章:

php - 使用 <select> 对 mysql 数据库进行排序,但没有任何反应

php - Mysql_query 查询数组内的所有项目

php - 找不到 'Laravelista\Comments'类

php - 替代 MySQL 中的 strtotime()

c# - 如何在特定时区转换日期时间?

c# - NumericUpDown 控件可以做到这一点吗?

php - 动态地将 GET 方法发送的一组 ID 分成单独的 ID

php - CodeIgniter 负载 Controller View

python - 使用Python将时间戳列从列表插入MYSQL

java - 从 String 到 Long 到 String 问题的 Android java datetime 值