如何用PHP循环生成存储当前及去年各月份起止时间戳的数组?
PHP生成当前及上一年所有月份起止时间戳数组
我来帮你搞定这个需求!用PHP的DateTime类处理日期能完美避开不同月份天数不同的坑,还能轻松生成标准的时间戳,下面是完整的实现方案:
实现代码
<?php // 初始化目标数组,和你需要的结构完全匹配 $dates = [ 'previous dates' => [], 'current dates' => [] ]; // 获取当前年份和上一年份 $currentYear = date('Y'); $prevYear = $currentYear - 1; // 处理上一年的所有月份 for ($month = 1; $month <= 12; $month++) { // 生成你需要的"月份, 年份"格式名称(比如 "November, 2017") $monthName = date('F, Y', strtotime("$prevYear-$month-01")); // 生成当月开始时间戳:当月第一天00:00:00 $startDateTime = new DateTime("$prevYear-$month-01 00:00:00"); $startTimestamp = $startDateTime->getTimestamp(); // 生成当月结束时间戳:当月最后一天23:59:59,自动适配不同月份的天数 $endDateTime = new DateTime("$prevYear-$month-01"); $endDateTime->modify('last day of this month 23:59:59'); $endTimestamp = $endDateTime->getTimestamp(); // 把数据存入对应数组 $dates['previous dates'][$monthName] = [ 'start' => $startTimestamp, 'end' => $endTimestamp ]; } // 处理当前年份的所有月份,逻辑和上一年一致 for ($month = 1; $month <= 12; $month++) { $monthName = date('F, Y', strtotime("$currentYear-$month-01")); $startDateTime = new DateTime("$currentYear-$month-01 00:00:00"); $startTimestamp = $startDateTime->getTimestamp(); $endDateTime = new DateTime("$currentYear-$month-01"); $endDateTime->modify('last day of this month 23:59:59'); $endTimestamp = $endDateTime->getTimestamp(); $dates['current dates'][$monthName] = [ 'start' => $startTimestamp, 'end' => $endTimestamp ]; } // 可以取消注释查看生成的数组结果 // print_r($dates); ?>
关键细节说明
- 时间戳准确性:用
DateTime的modify方法获取当月最后一天,自动适配2月、大月小月的不同天数,比手动计算日期靠谱得多。 - 灵活调整范围:如果不需要上一年的全部12个月(比如只取最后2个月),只需要修改循环的起始值,比如把上一年的循环改成
for ($month = 11; $month <= 12; $month++)就行。 - 格式完全匹配:生成的数组结构和你给出的示例完全一致,直接就能用在业务逻辑里。
内容的提问来源于stack exchange,提问作者Nooglers BIT
相关产品推荐
相关产品推荐

