Преобразовать метку времени в экземпляр даты и времени - PullRequest
0 голосов
/ 02 января 2019

У меня установлена ​​следующая настройка 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 может вызвать некоторые проблемы. Есть предложения, что я делаю не так?

Спасибо заранее за ответ!

UPDATE

После использования 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"
}

Как вы видите, неправильная метка времени преобразуется?

Есть предложения, почему?

UPDATE

Попробовав несколько вещей, я нашел следующее решение:

$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 голосов
/ 02 января 2019

При использовании echo для объекта PHP пытается вызвать магический метод __toString() для этого объекта. Если он не может этого сделать, он выдаст ошибку, которую вы получите. Я рекомендую использовать var_dump() для отладки объектов.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...