在 PHP 和 JavaScript 中获取时间戳的方式有所不同,导致它们的长度和单位可能不一致。以下是主要区别和解决方法:

1. PHP time() 和 JavaScript Date.parse(new Date()) 的区别

语言/方法 返回值 单位 示例
PHP time() 当前 Unix 时间戳(秒) (10位) 1651234567
JS Date.parse(new Date()) 当前 Unix 时间戳(毫秒) 毫秒(13位) 1651234567000
  • PHP time() 返回的是 秒级时间戳(10位)。

  • JS Date.parse(new Date()) 返回的是 毫秒级时间戳(13位)。

2. 如何让它们一致?

(1) PHP 获取毫秒级时间戳(13位)

// 方法1:microtime(true) 返回秒 + 微秒,乘以 1000 得到毫秒
$milliseconds = round(microtime(true) * 1000);
echo $milliseconds; // 1651234567000(13位)

// 方法2:直接用 time() * 1000(但精度不如 microtime)
$milliseconds = time() * 1000;

(2) JavaScript 获取秒级时间戳(10位)

// 方法1:Math.floor(Date.now() / 1000)
const timestampSec = Math.floor(Date.now() / 1000); // 1651234567(10位)

// 方法2:Math.floor(new Date().getTime() / 1000)
const timestampSec = Math.floor(new Date().getTime() / 1000);

3. 如何互相转换?

转换方式 代码示例
PHP → JS(毫秒) $jsTimestamp = time() * 1000;
JS → PHP(秒) $phpTimestamp = floor($jsTimestamp / 1000);

4. 总结

  • PHP time() 返回 秒级(10位)。

  • JS Date.parse(new Date()) 返回 毫秒级(13位)。

  • 统一方式

    • PHP → 毫秒microtime(true) * 1000

    • JS → 秒Math.floor(Date.now() / 1000)

这样就能确保 PHP 和 JavaScript 的时间戳一致,便于前后端交互。