今天在对接一个 API 的时候,发现需要生成高精度的时间戳,格式为yyyyMMddHH24mmssSSS
。
本文将介绍两种常见的实现方式,并讨论它们的优缺点。
格式 yyyyMMddHH24mmssSSS
的含义如下:
例如,时间 2025-01-02 11:30:45.123
的格式化结果为:20250102113045123
。
DateTime
类实现以下是使用 DateTime
类生成毫秒时间戳的代码示例:
<?php
$dateTime = new DateTime();
// 获取当前时间的微秒数并计算为毫秒
$milliseconds = intval($dateTime->format('u') / 1000);
// 格式化时间
$formattedTime = $dateTime->format("YmdHi") . $dateTime->format("s") . sprintf("%03d", $milliseconds);
echo $formattedTime;
$dateTime->format('u')
返回当前时间的微秒(6 位数,例如 123456
)。intval($dateTime->format('u') / 1000)
将微秒转换为毫秒(3 位数,例如 123
)。sprintf("%03d", $milliseconds)
确保毫秒部分始终为 3 位数(不足时补零)。假设当前时间为 2025-01-02 11:30:45.123456
,输出结果为:
20250102113045123
microtime
函数实现另一种方法是结合 microtime()
和 date()
函数:
<?php
$microtime = microtime(true);
// 格式化时间到秒
$formattedDate = date('YmdHis', floor($microtime));
// 获取毫秒部分
$milliseconds = sprintf('%03d', ($microtime - floor($microtime)) * 1000);
// 拼接毫秒
$formattedDate .= $milliseconds;
echo $formattedDate;
microtime(true)
返回当前 Unix 时间戳,包含秒和小数部分。floor($microtime)
获取整数秒部分。($microtime - floor($microtime)) * 1000
提取小数部分并转换为毫秒。假设当前时间为 2025-01-02 15:30:45.123456
,输出结果为:
20250102153045123
特性 | 使用 | 使用 |
---|---|---|
代码简洁性 | 更加现代化,语义清晰 | 较为传统,需要手动处理毫秒 |
精度 | 取决于系统支持的时间精度 | 依赖 |
扩展性 | 更容易与其他 | 适合处理与 Unix 时间戳相关的逻辑 |
为了验证两种方法的输出是否一致,可以添加以下代码:
if ($formattedTime === $formattedDate) {
echo "两种方法的输出一致:$formattedTime\n";
} else {
echo "两种方法的输出不一致:\n第一种方法:$formattedTime\n第二种方法:$formattedDate\n";
}
DateTime
类,建议采用第一种方法,代码语义更加清晰。microtime()
或 Unix 时间戳直接交互,可以选择第二种方法。选择哪种方式主要取决于项目需求和代码风格偏好。希望本文对你在生成带毫秒的时间戳方面有所帮助!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。