我有以下PHP设置:
$ php --version
PHP 7.1.8 (cli) (built: Aug 1 2017 21:10:46) ( ZTS MSVC14 (Visual C++ 2015) x86
)
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Xdebug v2.6.1, Copyright (c) 2002-2018, by Derick Rethans
我正在使用xampp,所以我在32-bit version
的计算机上运行64-bit windows 8.1
。
我想将以下时间戳转换为Datetime实例:
$timestamp = 1546438627830;
$t = DateTime::createFromFormat('U',$timestamp);
echo $t;
但是,出现以下异常:
Catchable fatal error: Object of class DateTime could not be converted to string
我当时想我的32位PHP版本可能会引起一些问题。有什么建议我做错了吗?
提前致谢!
更新
使用var_dump()之后,我得到以下信息:
$timestamp = 1546438627830;
$t = DateTime::createFromFormat('U',$timestamp);
var_dump($t);
输出:
class DateTime#1 (3) {
public $date =>
string(20) "50974-09-09 05:30:30"
public $timezone_type =>
int(1)
public $timezone =>
string(6) "+00:00"
}
您可以看到错误的时间戳转换了吗?
任何建议为什么?
更新
尝试了几件事之后,我发现了以下解决方案:
$timestamp = 1546438627830;
$result = date ('c', (int) round ($timestamp / 1000));
$msec = (int) $timestamp % 1000;
$t = strtotime(str_replace ('+00:00', sprintf (".%03dZ", $msec), $result));
$finalTime = DateTime::createFromFormat('U', $t);
var_dump($finalTime);
答案 0 :(得分:2)
在对象上使用echo
时,PHP尝试在该对象上调用魔术__toString()
方法。如果无法做到这一点,它将抛出您得到的错误。我建议使用var_dump()
调试对象。</ p>
<?php
$timestamp = 1546438627830;
$t = DateTime::createFromFormat('U',$timestamp);
var_dump($t);
参考文献:
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.echo.php
http://php.net/manual/en/language.oop5.magic.php
http://php.net/manual/de/datetime.createfromformat.php
编辑:处理毫秒
<?php
$timestamp = (int)(1546438627830 / 1000);
$t = DateTime::createFromFormat('U',$timestamp);
var_dump($t);