PHP 日期与时间
PHP 提供了丰富的日期时间函数,以及面向对象的 DateTime 类。
基础函数
// 获取当前时间戳(Unix 时间戳:1970-01-01 起的秒数) echo time(); // 如:1714000000`// 格式化当前时间 echo date('Y-m-d'); // 2024-01-15 echo date('Y-m-d H:i:s'); // 2024-01-15 14:30:00 echo date('Y年m月d日 H:i'); // 2024年01月15日 14:30 echo date('D, d M Y'); // Mon, 15 Jan 2024 ``
date() 格式字符
字符 说明 示例 Y 四位年份 2024 m 两位月份 01-12 d 两位日期 01-31 H 24小时制小时 00-23 i 分钟 00-59 s 秒 00-59 N 星期(1=周一) 1-7 U Unix 时间戳 1714000000 时间戳转换
php // 字符串转时间戳 $ts = strtotime('2024-06-01'); $ts = strtotime('next Monday'); $ts = strtotime('+7 days'); $ts = strtotime('-1 month');`echo date('Y-m-d', strtotime('+30 days')); // 30天后的日期
// mktime() 创建指定时间的时间戳 $ts = mktime(12, 0, 0, 6, 1, 2024); // 2024-06-01 12:00:00 echo date('Y-m-d H:i:s', $ts);
`DateTime 类(推荐)
php // 创建 $now = new DateTime(); $date = new DateTime('2024-06-01'); $date = new DateTime('now', new DateTimeZone('Asia/Shanghai'));`// 格式化 echo $now->format('Y-m-d H:i:s');
// 修改 $date->modify('+1 month'); $date->modify('next Friday');
// 设置 $date->setDate(2024, 12, 25); $date->setTime(10, 30, 0);
`日期计算
php $start = new DateTime('2024-01-01'); $end = new DateTime('2024-12-31');`// 计算差值 $diff = $start->diff($end); echo $diff->days; // 365(总天数) echo $diff->m; // 月数 echo $diff->y; // 年数
// 判断是否过期 $expire = new DateTime('2024-06-01'); $now = new DateTime(); if ($now > $expire) { echo '已过期'; }
`DateTimeImmutable(不可变对象)
php // DateTime 会修改原对象,DateTimeImmutable 返回新对象 $date = new DateTimeImmutable('2024-01-01'); $newDate = $date->modify('+1 month'); // $date 不变`echo $date->format('Y-m-d'); // 2024-01-01(不变) echo $newDate->format('Y-m-d'); // 2024-02-01
`时区设置
php // 全局设置(推荐放在入口文件) date_default_timezone_set('Asia/Shanghai');`echo date('Y-m-d H:i:s'); // 北京时间
// 单独指定时区 $tz = new DateTimeZone('America/New_York'); $date = new DateTime('now', $tz); echo $date->format('Y-m-d H:i:s');
``php // 计算年龄 function calcAge(string $birthday): int { return (new DateTime($birthday))->diff(new DateTime())->y; } echo calcAge('1995-08-15'); // 28实用示例
// 格式化为"多久前" function timeAgo(int $timestamp): string { $diff = time() - $timestamp; if ($diff < 60) return $diff . ' 秒前'; if ($diff < 3600) return floor($diff / 60) . ' 分钟前'; if ($diff < 86400) return floor($diff / 3600) . ' 小时前'; if ($diff < 604800) return floor($diff / 86400) . ' 天前'; return date('Y-m-d', $timestamp); } echo timeAgo(time() - 3600); // 1 小时前