用PHP中的DateTime分析毫秒时间戳



我想从毫秒时间戳创建一个DateTime对象,但这似乎不起作用:

$timestamp_in_ms = 1546300800000; // int or string no difference
var_dump(DateTime::createFromFormat("Uv", $timestamp_in_ms));
var_dump(DateTime::getLastErrors());

这导致:

bool(false)
array(4) {
["warning_count"]=>
int(0)
["warnings"]=>
array(0) {
}
["error_count"]=>
int(1)
["errors"]=>
array(1) {
[13]=>
string(12) "Data missing"
}
}

然而,如果我使用稍微不同的符号,它确实有效:

$timestamp_in_ms = "1546300800.000";
var_dump(DateTime::createFromFormat("U.v", $timestamp_in_ms));
var_dump(DateTime::getLastErrors());
object(DateTime)#1 (3) {
["date"]=>
string(26) "2019-01-01 00:00:00.000000"
["timezone_type"]=>
int(1)
["timezone"]=>
string(6) "+00:00"
}

是的,我可以这样做:

$timestamp_with_dot = $timestamp_in_ms / 1000 + "." + $timestamp_in_ms % 1000;

该文档没有对此提供任何见解。同时支持Uv

有关于这个问题的更多信息吗?我正在运行PHP 7.4.10

通过除以1000,您可以将毫秒时间戳转换为以秒为单位的浮点值。

$msTimeStamp = 1600790571478;
$floatSec = $msTimeStamp/1000.0;

当使用DateTime::createFromFormat时,您也可以使用"U.U";总体安排";u〃;格式应该正好是6个字符。这可以通过sprintf((来完成。

$dateTime = DateTime::createFromFormat("U.u", sprintf('%1.6F',$floatSec));
//test
echo $dateTime->format('Y-m-d H:i:s.u');
//2020-09-22 16:02:51.478000 
//Timezone "+00:00" (UTC)

毫秒时间戳也可以是浮点值,也可以包含微秒。上面的代码也适用于32位系统。

最新更新