0

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

これで、現在の月を表すすべての日付ができたので、DBマジックを実行できます...

このデータからテーブルを出力する方法については、> 1か月の週次期間(月曜日から開始)を検索を参照してください。

于 2013-01-06T23:00:16.770 に答える