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

时间:2019-01-02 14:36:56

标签: 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) 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);

1 个答案:

答案 0 :(得分:2)

在对象上使用echo时,PHP尝试在该对象上调用魔术__toString()方法。如果无法做到这一点,它将抛出您得到的错误。我建议使用var_dump()调试对象。<​​/ p>

https://3v4l.org/GlJaW

<?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);