将毫秒添加到日期时间obj

时间:2019-01-02 21:42:05

标签: php datetime datetime-format

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

$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格式?

预先感谢您或您的回复!

1 个答案:

答案 0 :(得分:3)

我从未见过有人以多种错误的方式一次使用如此多有冲突的日期函数。选一个。具体来说是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"
}