例如,时间 2025-01-02 11:30:45.123 的格式化结果为: 20250102113045123

使用 DateTime 类实现

以下是使用 DateTime 类生成毫秒时间戳的代码示例:

$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() 函数:

    $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
    使用 DateTime 类 使用 microtime()

    为了验证两种方法的输出是否一致,可以添加以下代码:

    if ($formattedTime === $formattedDate) {
        echo "两种方法的输出一致:$formattedTime\n";
    } else {
        echo "两种方法的输出不一致:\n第一种方法:$formattedTime\n第二种方法:$formattedDate\n";
    
  • 如果你的项目主要使用 DateTime 类,建议采用第一种方法,代码语义更加清晰。
  • 如果需要与 microtime() 或 Unix 时间戳直接交互,可以选择第二种方法。
  • 选择哪种方式主要取决于项目需求和代码风格偏好。希望本文对你在生成带毫秒的时间戳方面有所帮助!