2012-10-26 60 views
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; 

}

回答

1

您需要的值基於陣列的第一天編輯$firstDayOfMonth使用(在這個例子中,我從星期一開始)2012年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()方法創建基於星期日的日期,這是一週中的第一天,因此它將覆蓋它。

見結果在這裏:Link

+0

什麼我需要改變,以使週二日曆的開始?我嘗試了「-2」並且改變了$ days數組...也似乎沒有奏效? – user1421214

+0

看到我編輯的答案和鏈接 –

相關問題