Добавить миллисекунды к datetime obj - PullRequest
0 голосов
/ 03 января 2019

Я использую PHP 7.1.8, и я конвертирую метку времени в объект datetime:

$t = 1546464670412;
date_default_timezone_set('UTC');
$result = date ('c', (int) round ($t / 1000));
$msec = (int) $t % 1000;
$ts = str_replace ('+00:00', sprintf (".%03dZ", $msec), $result);
$f = DateTime::createFromFormat("U", strtotime($ts));
var_dump($f);

// Output
/*
class DateTime#1 (3) {
  public $date =>
  string(19) "2019-01-02 21:31:10"
  public $timezone_type =>
  int(1)
  public $timezone =>
  string(6) "+00:00"
}
*/

Отметка времени корректно преобразуется в Ч: м: с, однако я бы также хотел добавить миллисекунды.

Какие-либо предложения, какой формат DateTime я должен использовать?

Заранее спасибо или ваши ответы!

1 Ответ

0 голосов
/ 03 января 2019

Я никогда не видел, чтобы кто-то использовал столько противоречивых функций даты одновременно и так много неправильных способов.Выбери один.В частности, интерфейс DateTime.

$t = 1546464670412;
$f = DateTime::createFromFormat("U.u", $t/1000);
var_dump($f);

$t/1000 приводит к плавающему 1546464670.412, который неявно приводится к строке и анализируется в соответствии с заданным форматом .Вам не нужно устанавливать часовой пояс по умолчанию, поскольку все временные метки неявно обозначены как UTC, поскольку у них нет механизма передачи часового пояса.

Результат:

object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2019-01-02 21:31:10.412000"
  ["timezone_type"]=>
  int(1)
  ["timezone"]=>
  string(6) "+00:00"
}
...