
本文详细介绍如何在 php 中将形如 "01/01/2020-15:14" 的自定义格式日期时间准确转换为自 unix 纪元(1970-01-01 00:00:00 utc)起的毫秒级时间戳,推荐使用 datetime 类的 format('uv') 方法。
本文详细介绍如何在 php 中将形如 "01/01/2020-15:14" 的自定义格式日期时间准确转换为自 unix 纪元(1970-01-01 00:00:00 utc)起的毫秒级时间戳,推荐使用 datetime 类的 format('uv') 方法。
在 PHP 开发中,将日期时间字符串(如 01/01/2020-15:14)转换为毫秒级时间戳是常见需求,尤其在与 JavaScript(其 Date.now() 返回毫秒)、API 接口或时间序列数据库交互时至关重要。直接使用 strtotime() 或旧式 date() 函数无法原生输出毫秒,因为它们仅支持秒级精度。
✅ 推荐方案:使用 DateTime 类(PHP ≥ 5.3)
DateTime 提供了高精度格式化能力。关键在于其 format() 方法支持特殊格式字符:
- U:返回自 Unix 纪元起的秒数(等价于 getTimestamp());
- v:返回毫秒部分(000–999),需配合 U 使用以构成完整毫秒时间戳。
因此,$date->format('Uv') 实际返回的是:秒数 × 1000 + 毫秒部分,即标准的毫秒时间戳(整数)。
以下是完整可运行示例:
立即学习“PHP免费学习笔记(深入)”;
<?php
// 解析带斜杠和短横线的混合格式(注意:PHP 会自动识别 '01/01/2020-15:14' 为 m/d/Y-H:i)
$date = new DateTime('01/01/2020-15:14');
// 获取毫秒时间戳(精确到毫秒,秒部分补零)
$milliseconds = $date->format('Uv');
echo $milliseconds; // 输出:1577920440000(对应 2020-01-01T15:14:00.000+00:00)
?>⚠️ 注意事项:
- 时区敏感:DateTime 默认使用服务器本地时区。若需 UTC 时间,请显式设置:$date->setTimezone(new DateTimeZone('UTC'));
-
格式兼容性:虽然 '01/01/2020-15:14' 能被 PHP 自动解析,但为保障健壮性,建议对非标准格式使用 DateTime::createFromFormat() 显式指定格式,例如:
$date = DateTime::createFromFormat('d/m/Y-H:i', '01/01/2020-15:14'); if (!$date || $date->format('d/m/Y-H:i') !== '01/01/2020-15:14') { throw new InvalidArgumentException('Invalid date format'); } $ms = $date->format('Uv'); - PHP 版本要求:v 格式符自 PHP 5.6.24 和 7.0.9 起才完全可靠(早期版本可能返回 0),生产环境请确保 PHP ≥ 7.1;
- 精度边界:PHP 的 DateTime 在微秒级精度上依赖系统支持,但 Uv 始终保证毫秒级正确性(不足三位自动补零)。
总结:使用 $date->format('Uv') 是目前最简洁、标准且跨版本兼容的毫秒时间戳生成方式。避免手动拼接(如 getTimestamp() * 1000),因其会丢失毫秒部分;也无需引入第三方库,原生 DateTime 即可满足精准需求。



















