Php 将时间戳转换为日期时间实例

Php 将时间戳转换为日期时间实例,php,datetime,Php,Datetime,我正在进行以下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

我正在进行以下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,因此我正在我的
64位windows 8.1
计算机上运行
32位版本

我想将以下时间戳转换为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);

在对象上使用
echo
时,PHP会尝试在该对象上调用magic
\uuu toString()
方法。如果它不能做到这一点,它将抛出你得到的错误。我建议使用
var\u dump()
调试对象


为什么你认为它错了?@Alex我打印了
var\u dump
输出,但是我仍然得到了错误的时间戳值。有什么建议吗?年份值等于
50974
从技术上讲,这并没有错,只是有点奇怪,你根本没想到会这样。一旦你能解释为什么你期待不同的结果-你将能够回答你的问题自己下一次,并会意识到为什么这是显而易见的一些人。谢谢你的回答!我使用
var\u dump
来“调试”时间戳。然而,我还是得到了错误的输出?我恳请您发表意见,原因可能是什么?如何正确解析它?@Anna.Klee您的时间戳以毫秒为单位。尝试编辑。请确保阅读文档页面至
DateTime::createFromFormat
U
修饰符表示自unix纪元以来的秒,而不是毫秒。这就是奇怪的行为。
<?php

$timestamp = 1546438627830;
$t = DateTime::createFromFormat('U',$timestamp);
var_dump($t);
<?php

$timestamp = (int)(1546438627830 / 1000);
$t = DateTime::createFromFormat('U',$timestamp);
var_dump($t);