如果我有开始日期(例如2009-02-01
)和结束日期(如2010-01-01
),如何创建循环以遍历范围中的所有日期(月)?PHP:在日期范围内遍历所有月份?
27
A
回答
70
尝试
$start = $month = strtotime('2009-02-01');
$end = strtotime('2011-01-01');
while($month < $end)
{
echo date('F Y', $month), PHP_EOL;
$month = strtotime("+1 month", $month);
}
心灵的音符http://php.net/manual/de/datetime.formats.relative.php
相对月份值是基于他们经过几个月的长度来计算。一个例子是“2011年2月30日+2月”,这将产生“2012-01-30”。这是由于11月份为30天,而12月份为31天,共计61天。
作为PHP5.3的可以使用http://www.php.net/manual/en/class.dateperiod.php
26
实施例的DateTime,DateInterval和DatePeriod类组合:
$start = new DateTime('2009-02-01');
$interval = new DateInterval('P1M');
$end = new DateTime('2011-01-01');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
echo $dt->format('F Y') . PHP_EOL;
}
2
$start = strtotime('2011-09-01');
$end = strtotime('2013-12-01');
while($start < $end)
{
echo date('F Y', $start) . '<br>';
$start = strtotime("+1 month", $start);
}
1
我有是在结果中最佳的方法:
$begin = new DateTime('2014-07-14');
$end = new DateTime('2014-08-01');
$end = $end->modify('+1 month');
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($begin, $interval, $end);
foreach($period as $dt) {
var_dump($dt->format("m"));
}
A @Glavic的方法
15
接受的答案不是正确的方法。
我试过这段代码,它不能正常工作。如果您的开始日期是月底,结束日期是第3个月的开始日期。
例如:2014-08-31 - 2014-10-01
预计应该是。
- 月
- 月
- 月
更好的解决方案是:
$start = new DateTime('2010-12-02');
$start->modify('first day of this month');
$end = new DateTime('2012-05-06');
$end->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
echo $dt->format("Y-m") . "<br>\n";
}
1
我喜欢接受的答案的简单性,但作为3s2ng,它并不总是工作。所以我这样tweeked它:
$start = strtotime('2009-02-01');
$startmoyr = date('Y', $start) . date('m', $start);
$end = strtotime('2013-12-01');
$endmoyr = date('Y', $end) . date('m', $end);
while ($startmoyr <= $endmoyr) {
echo date("F Y", $start) . "<br>";
$start = strtotime("+1month", $start);
$startmoyr = date('Y', $start) . date('m', $start);
}
相关问题
- 1. PHP - 按月份的日期范围
- 2. PHP日历:遍历选定的月份?
- 3. EXCEL:更改月份范围内到月份范围内发生的日期
- 4. 检查日期范围是否在月份(日历)
- 5. 选择当前月份到下个月份的日期范围日期范围
- 6. 在日期范围内计算日期范围中的月份的轨迹
- 7. Airbnb反应日期范围选择器仅显示当前月份日历未选择日期月份日历
- 8. 获取月份日期范围的日期范围
- 9. 获取两个日期范围内的所有月份和年份的列表
- 10. 获取特定月份和年份的日期范围内的所有记录
- 11. 检查日期落在月份和年份范围内
- 12. RoR |未遍历多个月的日期范围
- 13. Lua的遍历日期范围
- 14. 遍历NodeJS中的日期范围
- 15. ValueError:日期超出月份范围
- 16. 填写日期范围内的月份和年份?
- 17. 日期范围到PHP在几个月
- 18. 选择给定日期范围内的所有月份,包括具有0值的月份
- 19. 哪个月份包含在日期范围内?
- 20. 在日期范围之间查找特定月份的日期
- 21. 使用Bootstrap Datepicker选择月份日期范围和月份
- 22. 遍历范围
- 23. 使用日历表填写另一个日期范围内的所有日期
- 24. 如何在日期范围或月份中获取日历事件android
- 25. 返回所有月份和年份之间的日期范围 - SQL
- 26. Perl:循环遍历指定范围的月份
- 27. asp.net日历日期范围
- 28. php函数获取日期范围内的所有星期一
- 29. 检查日期范围只月份和年份在Python
- 30. 甲骨文结束日期范围内的月份值中
我试过这个片段,它不能正常工作。如果您的开始日期是月底,结束日期是第3个月的开始日期。例如:2014-08-31 - 2014-10-01 – 3s2ng 2014-10-01 09:24:53
@ 3s2ng是的,但这是相对时间格式的预期行为。查看我的答案更新。 – Gordon 2014-10-01 09:50:57
这将做到这一点。谢谢。 – 3s2ng 2014-10-01 10:33:01