在前后端分离的开发场景中,前端经常会把时间数据以时间戳的形式传递给PHP后端,PHP需要正确接收这类参数并完成格式转换才能满足业务逻辑需求。不同的请求方式和时间戳类型对应的处理逻辑有所区别,掌握对应的方法可以避免很多常见的参数处理错误。

一、PHP接收前端时间戳的常用方式
1. 接收GET请求传递的时间戳
前端通过URL参数传递时间戳时,PHP可以通过$_GET超全局数组获取对应参数,获取后需要先校验参数是否存在且合法。
<?php
// 假设前端传递的参数为 timestamp,示例请求:/api/test.php?timestamp=1693564800
if (isset($_GET['timestamp']) && is_numeric($_GET['timestamp'])) {
$timestamp = intval($_GET['timestamp']);
echo "接收到的秒级时间戳为:" . $timestamp;
} else {
echo "未获取到合法的时间戳参数";
}
?>
2. 接收POST请求传递的时间戳
POST请求传递时间戳时,如果是表单格式数据,用$_POST数组获取;如果是JSON格式数据,需要读取输入流后解析JSON。
<?php
// 表单格式POST请求处理
if (isset($_POST['timestamp']) && is_numeric($_POST['timestamp'])) {
$timestamp = intval($_POST['timestamp']);
}
// JSON格式POST请求处理
$input = file_get_contents('php://input');
$data = json_decode($input, true);
if (isset($data['timestamp']) && is_numeric($data['timestamp'])) {
$jsonTimestamp = intval($data['timestamp']);
}
?>
二、时间戳转换常用技巧
1. 时间戳转可读日期格式
使用PHP内置的date函数可以把时间戳转换为指定格式的日期字符串,转换前需要确认时区设置正确,避免时间偏差。
<?php
// 设置时区为中国上海
date_default_timezone_set('Asia/Shanghai');
$timestamp = 1693564800; // 对应2023-09-01 00:00:00
// 转换为年-月-日 时:分:秒格式
$dateStr = date('Y-m-d H:i:s', $timestamp);
echo $dateStr; // 输出 2023-09-01 00:00:00
?>
2. 日期字符串转时间戳
如果需要把日期字符串转换为时间戳,可以使用strtotime函数,该函数支持大部分常见的日期格式。
<?php
date_default_timezone_set('Asia/Shanghai');
$dateStr = '2023-09-01 12:30:00';
$timestamp = strtotime($dateStr);
echo $timestamp; // 输出对应的秒级时间戳
?>
3. 处理毫秒级时间戳
前端有时会传递毫秒级时间戳(13位),PHP的date函数默认处理秒级时间戳(10位),需要先把毫秒级时间戳除以1000再处理。
<?php
date_default_timezone_set('Asia/Shanghai');
// 假设前端传递的是13位毫秒级时间戳
$msTimestamp = 1693564800000;
$secTimestamp = intval($msTimestamp / 1000);
$dateStr = date('Y-m-d H:i:s', $secTimestamp);
echo $dateStr; // 输出 2023-09-01 00:00:00
?>
三、时间戳处理的注意事项
- 接收参数后一定要先做合法性校验,确认参数是数字类型,避免出现非数字参数导致的转换错误。
- PHP默认时区可能不是业务需要的时区,建议在程序入口处统一设置
date_default_timezone_set,避免时间转换出现偏差。 - 如果时间戳是字符串类型,需要先转换为整数类型再处理,避免
date函数传入字符串参数出现错误。 - 处理毫秒级时间戳时,注意除法运算后的取整逻辑,避免小数部分影响转换结果。