PHP获取指定时间段的时间戳与日期格式详解
在PHP开发中,处理日期与时间戳是常见需求。本文详细介绍了如何使用strtotime和mktime函数精确获取本周、本月及本年的起止时间戳,并演示了时间戳与标准日期格式(如 Y-m-d H:i:s)的双向转换方法,同时包含必要的时区配置建议。
核心目标与环境准备
PHP内置了丰富的日期处理函数,但不同场景下(如数据库查询、日志分析)通常需要特定的时间范围。主要涉及两个核心函数:
strtotime():将英文文本的日期时间描述解析为Unix时间戳。mktime():根据提供的时分秒日期月份星期年份返回相应的Unix时间戳。
在使用任何时间函数前,务必确保服务器时区设置正确,否则可能导致时间偏差8小时(与中国标准时间PRC的差异):
date_default_timezone_set('PRC');
第一步:获取特定时间段的Unix时间戳
以下是获取不同时间范围起始与结束时间戳的标准写法。注意mktime函数的参数顺序通常为:时、分、秒、月、日、年。
第1步:获取今日时间戳
目的:用于统计当天从00:00:00到23:59:59的数据。
// 获取今日开始时间戳和结束时间戳
$time_start = strtotime(date('Y-m-d 00:00:00', time()));
$time_end = strtotime(date('Y-m-d 23:59:59', time()));
第2步:获取昨日时间戳
目的:通过偏移当前时间24小时(3600*24秒)来获取昨天。
$yesterday_time = time() - 3600 * 24;
$day_start = strtotime(date('Y-m-d 00:00:00', $yesterday_time));
$day_end = strtotime(date('Y-m-d 23:59:59', $yesterday_time));
第3步:获取本周时间戳
目的:利用date('N')(ISO-8601格式的周数,1代表星期一,7代表星期日)计算周一作为本周起点。
// 假设一周从周一开始
$week_start_timestamp = mktime(0, 0, 0, date('m'), date('d') - date('N') + 1, date('Y'));
$week_end_timestamp = mktime(23, 59, 59, date('m'), date('d') - date('N') + 7, date('Y'));
第4步:获取上周时间戳
目的:基于本周起始点向前推7天。
$last_week_start = mktime(0, 0, 0, date('m'), date('d') - date('N') - 6, date('Y'));
$last_week_end = mktime(23, 59, 59, date('m'), date('d') - date('N'), date('Y'));
第5步:获取本月时间戳
目的:月份固定,日期从1号到当月最后一天(使用date('t')获取当月天数)。
$month_start = mktime(0, 0, 0, date('m'), 1, date('Y'));
$month_end = mktime(23, 59, 59, date('m'), date('t'), date('Y'));
第6步:获取上月/去年时间戳
目的:对于跨年或跨月边界,推荐使用strtotime处理相对时间更稳妥。
// 上月时间戳
$last_month_start = strtotime(date('Y-m-01 00:00:00', strtotime('-1 month')));
// 注意:end calculation需小心,可用 mktime 结合上一月的天数
$last_month_end = strtotime(date("Y-m-d 23:59:59", strtotime(-date('d').'day')));
// 去年时间戳
$last_year_start = mktime(0, 0, 0, 1, 1, date('Y') - 1);
$last_year_end = mktime(23, 59, 59, 12, 31, date('Y') - 1);
第二步:将时间戳转换为日期字符串
date()函数用于将时间戳格式化为可读的日期字符串。
操作入口与动作
$timestamp = time(); // 获取当前时间戳
$formatted_date = date('Y-m-d H:i:s', $timestamp);
echo $formatted_date; // 输出示例:2023-10-27 10:30:00
重要参数说明
Y:四位数的年(如 2023)。m:两位数的月(01-12)。d:两位数的日(01-31)。H:24小时制的小时(00-23)。i:带有前导零的分钟(00-59)。s:带有前导零的秒(00-59)。
第三步:将日期字符串转换为时间戳
当需要从用户输入或数据库读取的日期格式还原为时间戳以便计算时,使用strtotime()。
$date_string = '2023-10-27 10:30:00';
$ts = strtotime($date_string);
echo $ts; // 输出对应的时间戳整数
完成判断与排错
完成状态检查:运行代码后,输出的时间戳数值应符合当前服务器时间的预期(差值在合理范围内),且格式化后的日期显示正确。
常见问题排查:
- 时间不对:90%的原因是未设置时区。
date_default_timezone_set('PRC');必须放在脚本头部或公共配置中。 - 跨年问题:手动计算年份时,若当前是1月,减1可能会出错,建议使用
strtotime('-1 year')等相对时间描述让系统自动处理。
以上就是PHP实现获取本年、本月、本周时间戳和日期格式的详细内容,更多关于PHP日期时间处理的知识资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









