这是我的功能:
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/