我在mySQL表中设置了一个日历,我试图通过每月日历(1月,2月,3月)输出日期,这些日历记录了前几个月和下个月的“缺失日期”。
因此,如果我想在2013年1月制作日历,1月1日在星期二制作 - 我很难编写一种方法来证明太阳12月30日和12月31日作为“太空填充物”或者有什么你......知道我的意思吗?
我很难绕过如何输出这些信息。
数据结构和数据如下:
Table_name:sched_calendar_table
dt y q m d dw monthName dayName w isWeekday isHoliday holidayDescr isPayday
2010-01-01 2010 1 1 1 6 January Friday 0 1 1 New Year's Day 0
2010-01-02 2010 1 1 2 7 January Saturday 0 0 0 0
2010-01-03 2010 1 1 3 1 January Sunday 1 0 0 0
2010-01-04 2010 1 1 4 2 January Monday 1 1 0 0
2010-01-05 2010 1 1 5 3 January Tuesday 1 1 0 0
我计划使用表格创建每个月历。
所以代码的最初部分是:
echo '<table>';
$sql="SELECT * FROM sched_calendar_table WHERE y=2013";
$result=mysql_query($sql);
while($row=mysql_query($result)){
echo '<tr><td>'; // .. unsure how to account for the placeholder days that aren't part of the month being displayed... how to do this?
}
echo '</table>';
答案 0 :(得分:1)
快速功能,按周返回所有日期,从星期一开始,在星期日结束(即使日期是在月之后/之前)。
function getWeekDays($month, $year)
{
$dFrom = new DateTime("$year-$month-01");
$dTo = clone $dFrom;
if (($N = $dFrom->format('N')) > 1) {
$dFrom->modify('-' . ($N - 1) . ' day');
}
$dTo->add(new DateInterval('P1M'));
if (($N = $dTo->format('N')) < 7) {
$dTo->modify((8 - $N) . ' day');
}
$p = new DatePeriod($dFrom, new DateInterval('P1D'), $dTo);
$datesByWeek = array();
foreach ($p as $d) {
$datesByWeek[ $d->format('W') ][] = $d;
}
return $datesByWeek;
}
示例:
print_r( getWeekDays(1, 2013) );
现在你有所有代表当月的日期,所以你可以做DB魔术......
如何从此数据输出表格,请参阅&gt; Find weekly periods (starting on a Monday) for a month