PHP时间戳转日期
PHP时间戳转日期
引言
数据库里常存Unix时间戳(秒级整数),展示到页面要转成可读日期;反过来用户选的日期也要转成时间戳入库。date()和strtotime()是这对基础转换工具,理解格式符和时区才能避免差8小时。
时间戳转日期
$ts = 1760000000;
echo date('Y-m-d H:i:s', $ts);
date()第二个参数缺省就是当前时间time(),传指定时间戳则格式化该时刻。
当前时间戳
echo time(); // 秒级时间戳
echo microtime(true); // 带微秒的浮点时间戳
日期字符串转时间戳
$ts = strtotime('2026-10-19 08:30:00');
echo $ts;
strtotime支持英文相对表达式:
strtotime('tomorrow');
strtotime('+1 week');
strtotime('next Monday');
DateTime面向对象写法
$dt = new DateTime('@' . $ts);
echo $dt->format('Y-m-d H:i:s');
$d = DateTime::createFromFormat('Y-m-d', '2026-10-19');
echo $d->getTimestamp();
复杂时区和格式解析用DateTime更稳。
常用格式符
- Y四位年,m两位月,d两位日,H24小时,i分,s秒;
- 带毫秒用v,星期用D/l,12小时制用g/a。
注意事项
- 服务器时区不对会差8小时,先date_default_timezone_set('Asia/Shanghai');
- date()对1970前或2038前后32位系统有边界问题;
- strtotime解析失败返回false,要判空再用;
- 毫秒时间戳除以1000再传给date();
- 跨时区存储建议统一UTC,展示时再转本地;
- MySQL存int(10)秒级,避免用字符串日期做比较。
总结
时间戳转日期用date('Y-m-d H:i:s', $ts),日期转时间戳用strtotime(),复杂解析用DateTime。先设好Asia/Shanghai时区,毫秒先除以1000,strtotime失败要判空。入库统一存秒级时间戳,展示层再格式化,比存字符串日期更好比较和索引。
PHP 时间日期处理
PHP 时间日期处理
时间日期是开发常用功能,这些函数要记住。
1. 获取当前时间
// 当前时间戳
echo time();
// 当前日期时间
echo date('Y-m-d H:i:s');
// 今天日期
echo date('Y-m-d');
2. 时间戳和日期互转
时间戳转日期
$time = time();
echo date('Y-m-d H:i:s', $time);
日期转时间戳
$date = '2024-01-01 12:00:00';
$time = strtotime($date);
echo $time;
3. 常用日期格式
// 2024-01-01
echo date('Y-m-d');
// 2024-01-01 12:00:00
echo date('Y-m-d H:i:s');
// 2024年01月01日
echo date('Y年m月d日');
// 2024/01/01
echo date('Y/m/d');
// 星期几
echo date('l'); // Sunday
4. 常用格式字符
- Y: 4位年
- m: 2位月
- d: 2位日
- H: 24小时制
- i: 分钟
- s: 秒
5. 日期加减
// 明天
echo date('Y-m-d', strtotime('+1 day'));
// 昨天
echo date('Y-m-d', strtotime('-1 day'));
// 一周后
echo date('Y-m-d', strtotime('+1 week'));
// 一个月后
echo date('Y-m-d', strtotime('+1 month'));
// 一年后
echo date('Y-m-d', strtotime('+1 year'));
6. 计算时间差
$start = strtotime('2024-01-01');
$end = strtotime('2024-01-10');
// 相差天数
$diff = ($end - $start) / 86400;
echo $diff . '天';
7. DateTime 类(推荐)
// 创建日期对象
$date = new DateTime('2024-01-01');
// 格式化输出
echo $date->format('Y-m-d H:i:s');
// 加一天
$date->add(new DateInterval('P1D'));
echo $date->format('Y-m-d');
// 计算两个日期差
$start = new DateTime('2024-01-01');
$end = new DateTime('2024-01-10');
$diff = $start->diff($end);
echo $diff->days . '天';
8. 常用场景
1)几天前
function timeAgo($time) {
$diff = time() - $time;
if ($diff < 60) return '刚刚';
if ($diff < 3600) return floor($diff/60) . '分钟前';
if ($diff < 86400) return floor($diff/3600) . '小时前';
return floor($diff/86400) . '天前';
}
2)生日计算
$birthday = '1990-01-01';
$age = floor((time() - strtotime($birthday)) / 31536000);
echo $age . '岁';
总结
PHP 时间日期处理要点:
- time() 获取时间戳
- date() 格式化日期
- strtotime() 日期转时间戳
- 用 +1 day 等做日期加减
- 推荐用 DateTime 类
- 时间差除以86400得天数
- 注意时区设置
做开发时间日期天天用,这些函数必须熟。