在每个月的开始/结束时显示占位符空间的日历(日期,星期几)

时间:2013-01-06 22:31:24

标签: php mysql calendar

我在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>';

1 个答案:

答案 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