将毫秒添加到 datetime obj

Add milliseconds to datetime obj

我正在使用 PHP 7.1.8 并将时间戳转换为日期时间对象:

$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"
}
*/

时间戳已正确转换为 H:m:s,但我还想添加毫秒。

我必须使用哪种 DateTime 格式有什么建议吗?

提前感谢您或您的回复!

我从未见过有人同时以如此多的错误方式使用如此多相互冲突的日期函数。选一个。特别是 DateTime 接口。

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

$t/1000 导致浮点数 1546464670.412 被隐式转换为字符串并根据 specified format 进行解析。您不需要设置默认时区,因为时间戳都是隐含的 UTC,因为它们没有传达时区的机制。

结果:

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