日数やカレンダーのスタイルを計...LOGIN

日数やカレンダーのスタイルを計算するシンプルなカレンダーを作成するPHP開発

113.png

カレンダーの日数とスタイルを計算するカスタム関数の calculate メソッド。

1) 先月の日数を計算します。月の最初の日が日曜日ではない場合は、先月の末日に基づいて計算する必要があります。

2) 日数を計算します。今月が休日の場合 特別な CSS スタイルを追加するだけです

3) 日曜日、土曜日、営業日の 3 つの状況で次の月の日数を計算します

<?php
function caculate($calendar) {   //$calendar 通过threshold方法计算后的数据
    $days = $calendar['days'];
    $firstDayOfWeek = $calendar['firstDayOfWeek'];//本月第一天的星期
    $lastDayOfWeek = $calendar['lastDayOfWeek'];//本月最后一天的星期
    $lastMonthOfLastDay = $calendar['lastMonthOfLastDay'];//上个月的最后一天
    $year = $calendar['year'];
    $month = $calendar['month'];
    $dates = array();
    
   if($firstDayOfWeek != 7) {
      $lastDays = array();
      $current = $lastMonthOfLastDay;//上个月的最后一天
      for ($i = 0; $i < $firstDayOfWeek; $i++) {
         array_push($lastDays, $current);//添加上一个月的日期天数
         $current--;
      }
      $lastDays = array_reverse($lastDays);//反序
      foreach ($lastDays as $index => $day) {
         array_push($dates, array('day' => $day, 'tdclass' => ($index ==0 ?'rest':''), 'pclass' => 'outter'));
      }
   }
   
   //本月日历信息
   for ($i = 1; $i <= $days; $i++) {
      $isRest = $this->_checkIsRest($year, $month, $i);
      //判断是否是休息天
      array_push($dates, array('day' => $i, 'tdclass' => ($isRest ?'rest':''), 'pclass' => ''));
   }
   
   //下月日历信息
   if($lastDayOfWeek == 7) {//最后一天是星期日
      $length = 6;
   }
   elseif($lastDayOfWeek == 6) {//最后一天是星期六
      $length = 0;
   }else {
      $length = 6 - $lastDayOfWeek;
   }
   for ($i = 1; $i <= $length; $i++) {
      array_push($dates, array('day' => $i, 'tdclass' => ($i==$length ?'rest':''), 'pclass' => 'outter'));
   }
   
   return $dates;
}
?>

注:

array_push()関数は最初のパラメータの配列の末尾をプッシュします。 1 つ以上の要素を追加し、新しい配列の長さを返します。

array_reverse() 関数は配列を逆の順序で返します。

次のセクション
1
2
<?php
function caculate($calendar) { //$calendar threshold
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
コースウェア