假设我有2个日期说2014年8月29日和2014年9月3日。我需要以下列格式显示这些日期之间的所有日期。
2014年8月
29周五
30周六
31太阳
2014年9月
01星期一
02星期二
03 Wed
我知道如何打印所有日期,如29,30,31,1,2,3。但我无法做到的是在两者之间获取月份名称。
答案 0 :(得分:3)
相当简单的问题,说实话,非常基本的解决方案可能......
$dateRange = new DatePeriod(
new DateTime('2014-07-28'),
new DateInterval('P1D'),
new DateTime('2014-08-04 00:00:01')
);
$month = null;
foreach ($dateRange as $date)
{
$currentMonth = $date->format('m Y');
if ($currentMonth != $month)
{
$month = $date->format('m Y');
echo $date->format('F Y').'<br />';
}
echo $date->format('d D').'<br />';
}
以上溶剂导致:
July 2014
28 Mon
29 Tue
30 Wed
31 Thu
August 2014
01 Fri
02 Sat
03 Sun
请注意它需要PHP&gt; = 5.3(由于使用了DatePeriod),但无论使用何种PHP版本,解决问题的实际逻辑都很容易实现。
答案 1 :(得分:1)
$timeS = strtotime("29 Aug 2014");
$timeE = strtotime("3 Sep 2014");
$monthS = -1;
$time = $timeS;
while ($time < $timeE) {
if ($monthS != date("n", $time)) {
echo date("M Y", $time) . "\n";
$monthS = date("n", $time);
}
echo date("d D", $time) . "\n";
$time = strtotime("+1 day", $time);
}
编辑:完成后我对@hindmost评论非常好:)
答案 2 :(得分:1)
我认为,这是完整的代码,如你所愿。
已执行的代码在这里......
http://phpfiddle.org/main/code/3cbe-4855
<?php
$currentMonth = null;
$timeS = strtotime("29 Aug 2013");
$timeE = strtotime("3 Sep 2014");
$time = $timeS;
while ($time < $timeE) {
$month = date("M", $time);
$year = date("Y", $time);
if ($month != $currentMonth)
echo "<br /><h3>".$month."- ".$year."</h3>";
$currentMonth = $month;
echo "<br />".date("d D", $time);
$time = strtotime("+1 day", $time);
}
?>