0

日曜日(土曜日)から始まる日を含むカレンダーを印刷する次の関数を作成しました...しかし、最初の日として任意の日を選択できるようにしたいです...例:初日は水曜日です...試しましたがうまくいきませんでした...これを修正するのを手伝ってくれませんか?

この開始日を反映するように日見出し配列を操作する方法を知っていますが、カレンダーの日がどういうわけか混乱します。

function testme() {
        $month = 8;
        $year = 2012;
        $days = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");

    echo $firstDayOfMonth = date('w',mktime(0,0,0,$month,1,$year)); // a zero based day number
    $daysInMonth     = date('t',mktime(0,0,0,$month,1,$year));

    $calendar = ' <!-- start cal -->';
    $calendar = '<table border="1" class="calendar">'."\r\n";
    $calendar .= '<thead><tr><th class="calendar-day-head">'.implode('</th><th class="calendar-day-head">',$days ).'</th></tr></thead><tbody>';
    $calendar .= "\r\n".'<tr class="calendar-row">';
    $calendar .= str_repeat('<td class="calendar-day-np">&nbsp;</td>', $firstDayOfMonth); // "blank" days until the first of the current week
    $calendar .= '';

    $dayOfWeek = $firstDayOfMonth + 1; // a 1 based day number: cycles 1..7 across the table rows

    for ($dayOfMonth = 1; $dayOfMonth <= $daysInMonth; $dayOfMonth++)
    {
        $date = sprintf( '%4d-%02d-%02d', $year, $month, $dayOfMonth );

        $calendar .= '';
        $calendar .= '<td class="calendar-day">
            '.$dayOfMonth.' <br />';

        $calendar .= '';

        $calendar .= '</td>'."\r\n";
        if ($dayOfWeek >= 7)
        {
            $calendar.= '</tr>'."\r\n";
            if ($dayOfMonth != $daysInMonth)
            {
                $calendar .= '<tr  class="calendar-row">';
            }
            $dayOfWeek = 1;
        }
        else
        {
            $dayOfWeek++;
        }
    }
    //echo 8-$dayOfWeek;
    $calendar .= str_repeat('<td  class="calendar-day-np">&nbsp;</td>', 8 - $dayOfWeek); // "blank" days in the final week
    $calendar .= '</tr></table>';
    $calendar .= ' <!-- end cal -->';
    echo $calendar;

}

4

1 に答える 1

1

$firstDayOfMonth2012年10月を使用して、配列の初日に基づいて編集する値が必要です(この例では月曜日から開始しています)。

<?php
function testme() {
        $month = 10;
        $year = 2012;
        $days = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");

    echo $firstDayOfMonth = date('w',mktime(0,0,0,$month,1,$year)); // a zero based day number


    /* IMPORTANT STATEMENT
       value based on the starting day of array
       E.G. (starting_day = value):
       Tuesday = 5
       Wednesday = 4
       Thursday = 3
       Friday = 2
       Saturday = 1
       Sunday = 0
       Monday = -1

    */

    $firstDayOfMonth = $firstDayOfMonth - 1;

    /* END IMPORTANT STATEMENT */


    $daysInMonth     = date('t',mktime(0,0,0,$month,1,$year));

    $calendar = ' <!-- start cal -->';
    $calendar = '<table border="1" class="calendar">'."\r\n";
    $calendar .= '<thead><tr><th class="calendar-day-head">'.implode('</th><th class="calendar-day-head">',$days ).'</th></tr></thead><tbody>';
    $calendar .= "\r\n".'<tr class="calendar-row">';
    $calendar .= str_repeat('<td class="calendar-day-np">&nbsp;</td>', $firstDayOfMonth); // "blank" days until the first of the current week
    $calendar .= '';

    $dayOfWeek = $firstDayOfMonth + 1; // a 1 based day number: cycles 1..7 across the table rows

    for ($dayOfMonth = 1; $dayOfMonth <= $daysInMonth; $dayOfMonth++)
    {
        $date = sprintf( '%4d-%02d-%02d', $year, $month, $dayOfMonth );

        $calendar .= '';
        $calendar .= '<td class="calendar-day">
            '.$dayOfMonth.' <br />';

        $calendar .= '';

        $calendar .= '</td>'."\r\n";
        if ($dayOfWeek >= 7)
        {
            $calendar.= '</tr>'."\r\n";
            if ($dayOfMonth != $daysInMonth)
            {
                $calendar .= '<tr  class="calendar-row">';
            }
            $dayOfWeek = 1;
        }
        else
        {
            $dayOfWeek++;
        }
    }
    //echo 8-$dayOfWeek;
    $calendar .= str_repeat('<td  class="calendar-day-np">&nbsp;</td>', 8 - $dayOfWeek); // "blank" days in the final week
    $calendar .= '</tr></table>';
    $calendar .= ' <!-- end cal -->';
    echo $calendar;

}
?>

/* IMPORTANT STATEMENT */mktime()メソッドは、日曜日が週の最初の曜日であることに基づいて日付を作成するため、これが重要です。これにより、日付が上書きされます。

ここで結果を参照してください:リンク

于 2012-10-26T10:43:20.960 に答える