2012-10-26 59 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

看到我编辑的答案和链接 –

相关问题