时间戳与日期处理是 PHP 开发里用得最多的逻辑之一。这里把 strtotime、date 转换、相对日期计算和 mktime 起止时间戳的常用片段整理成一份速查,复制即可使用。
字符串与时间戳互转
把标准日期字符串转成秒级时间戳,直接交给 strtotime:
echo strtotime('2020-01-15 11:20:10');
//直接输出转换后的时间戳
反过来配合 date,可以按任意格式输出,例如计算七天后的日期:
echo date("Y-m-d H:i:s",strtotime("+7 day"));
//输出七天后的日期
今天、昨天、明天
输出今天的日期,可以用 strtotime(‘today’) 取今天的开始时间戳,也可以直接用 time() 取当前秒时间戳:
date("Y-m-d",strtotime("today"));
//strtotime(‘today’)输出今天的开始时间戳
date("Y-m-d",time());
//time()输出当前秒时间戳
昨天有两种等价写法:
date("Y-m-d",strtotime("-1 day"));
date("Y-m-d",strtotime("yesterday"));
//二者都可以实现
明天同样有两种写法:
date("Y-m-d",strtotime("+1 day"));
date("Y-m-d",strtotime("tomorrow "));
//二者都可以实现
![]()
按天、按周与复合周期
加七天可以写成 +7 day:
date("Y-m-d",strtotime("+7 day"));
strtotime 支持在同一个字符串里叠加多个周期单位,一次算出复杂偏移:
date("Y-m-d H:i:s",strtotime("+1 week 2 days 4 hours 5 minute 2 seconds"));
用 mktime 计算起止时间戳
做统计时经常需要某个自然周期的起点与终点时间戳,mktime 组合 date 的各字段即可完成,涵盖今天、昨天、上周、本月等场景:
//php获取今天起止时间戳
mktime(0,0,0,date('m'),date('d'),date('Y'));
mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
//php获取昨天起止时间戳
mktime(0,0,0,date('m'),date('d')-1,date('Y'));
mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
//php获取上周起止时间戳
mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
//php获取本月起止时间戳
mktime(0,0,0,date('m'),1,date('Y'));
mktime(23,59,59,date('m'),date('t'),date('Y'));
//吃猫的鱼 www.fish9.cn
//两种方式都可以实现
注意事项
- strtotime 解析失败会返回 false,拼接用户输入的时间字符串时务必先校验再使用。
- 计算结果受服务器时区影响,建议用 date_default_timezone_set 明确时区,避免日期偏差一天。
- mktime 计算”上周起点”的写法依赖 date(‘w’)(当天是本周第几天),跨时区业务应先统一时间基准再套用。
- 需要精确到秒的周期边界时,用起止时间戳方案,而不是 date(“Y-m-d”,…) 这类只到天级的写法。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END

















暂无评论内容