
本文介绍如何在 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 交互时。关键在于:PHP 原生时间戳(time() 或 DateTime::getTimestamp())仅精确到秒,而毫秒需额外处理。
最简洁可靠的方式是使用 DateTime 类(PHP ≥ 5.3)配合格式化字符串 'Uv':
- U 表示自 Unix 纪元起的秒数(等价于 getTimestamp());
- v 表示微秒部分(000000–999999),因此 Uv 组合即为“秒数 × 1000 + 微秒 ÷ 1000”,结果即为毫秒值(注意:v 是六位微秒,需除以 1000 才得毫秒,但 format('Uv') 实际输出的是 秒数 后直接拼接 三位毫秒数 —— 这是 PHP 的特殊约定:当使用 v 时,Uv 格式会自动将微秒截取前三位作为毫秒,并拼接到秒数后,形成一个完整的毫秒级整数字符串。例如:若时间为 1577862840 秒 + 123456 微秒,则 format('Uv') 输出 "1577862840123")。
✅ 正确示例代码:
<?php
$date = new DateTime('01/01/2020-15:14');
// 自动解析常见分隔符(/ 和 -),时区默认为系统时区(建议显式设置)
$milliseconds = $date->format('Uv');
echo $milliseconds; // 输出类似:1577891640000(对应 2020-01-01 15:14:00 UTC)
?>⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
-
时区敏感:DateTime 默认使用服务器本地时区。若输入无时区信息(如本例),建议显式指定以避免歧义:
$date = new DateTime('01/01/2020-15:14', new DateTimeZone('UTC')); -
格式兼容性:DateTime 能智能解析 01/01/2020-15:14,但为保险起见,推荐使用标准格式(如 'Y-m-d H:i')或调用 createFromFormat() 精确控制:
$date = DateTime::createFromFormat('d/m/Y-H:i', '01/01/2020-15:14'); -
PHP 版本:'Uv' 格式自 PHP 5.3 起可用;若需兼容更低版本,可手动计算:
$seconds = $date->getTimestamp();
$microseconds = $date->format('u');
$milliseconds = $seconds * 1000 + (int)($microseconds / 1000);
总结:使用 $date->format('Uv') 是 PHP 中将日期时间转毫秒最直接、高效的方法。务必关注时区设定与输入格式鲁棒性,即可稳定获得符合前端或跨系统要求的毫秒时间戳。



















