我在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>';
快速函数,以周为单位返回所有日期,从星期一开始,以星期日结束(即使日期是在一个月之后或之前)。
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魔术…
如何从该数据输出表格,请参见>查找一个月的周周期(从星期一开始)