0

我在 mySQL 表中设置了一个日历,我试图通过月历(1 月、2 月、3 月)输出日期,这些日历说明了前几个月和下个月的“缺失天数”。

因此,如果我想为 2013 年 1 月制作日历,而 1 月 1 日是星期二——我很难编写一种方法来显示 12 月 30 日星期日和 12 月 31 日星期一充当“空间填充物”或你有什么...... 。 明白我的意思了吗?

我很难弄清楚如何输出这些信息。

数据结构和数据如下:

表名: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>';
4

1 回答 1

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) );

现在你有了代表当前月份的所有日期,所以你可以做数据库魔术......

如何从此数据中输出表格,请参阅 >查找一个月的每周期间(从星期一开始)

于 2013-01-06T23:00:16.770 回答