php - 在 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;
该文档没有提供任何见解。U
和均受v
支持。
关于这个问题的任何更多信息?我正在运行 PHP 7.4.10
解决方案
除以 1000 后,您可以将毫秒时间戳转换为以秒为单位的浮点数。
$msTimeStamp = 1600790571478;
$floatSec = $msTimeStamp/1000.0;
使用 DateTime::createFromFormat 时,也可以使用“Uu”格式。“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 位系统。
推荐阅读
- laravel - Laravel builder 按关系排序
- php - 限制 Wordpress 中的字符摘录
- java - Wildfly 服务 10.0 和 10.1 在 Windows 中无法停止
- wordpress - 对同一个按钮进行不同的点击触发
- angular - attr.data 在角度 5 上返回 null
- javascript - 如果我将变量 `close` 全局定义为 `0`,为什么变量`close` 被记录为`false`?
- sql - 如何通过汇总在组中添加平均列和总计?
- javascript - 在加载某些特定页面时隐藏页眉和页脚
- ansible - 从主机看不到 Ansible 环境变量
- python - 如何在文本中搜索特定段落?