日數(shù)やカレンダーのスタイルを計(jì)算するシンプルなカレンダーを作成するPHP開(kāi)発
カレンダーの日數(shù)とスタイルを計(jì)算するカスタム関數(shù)の calculate メソッド。
1) 先月の日數(shù)を計(jì)算します。月の最初の日が日曜日ではない場(chǎng)合は、先月の末日に基づいて計(jì)算する必要があります。
2) 日數(shù)を計(jì)算します。今月が休日の場(chǎng)合 特別な CSS スタイルを追加するだけです
3) 日曜日、土曜日、営業(yè)日の 3 つの狀況で次の月の日數(shù)を計(jì)算します
<?php function caculate($calendar) { //$calendar 通過(guò)threshold方法計(jì)算后的數(shù)據(jù) $days = $calendar['days']; $firstDayOfWeek = $calendar['firstDayOfWeek'];//本月第一天的星期 $lastDayOfWeek = $calendar['lastDayOfWeek'];//本月最后一天的星期 $lastMonthOfLastDay = $calendar['lastMonthOfLastDay'];//上個(gè)月的最后一天 $year = $calendar['year']; $month = $calendar['month']; $dates = array(); if($firstDayOfWeek != 7) { $lastDays = array(); $current = $lastMonthOfLastDay;//上個(gè)月的最后一天 for ($i = 0; $i < $firstDayOfWeek; $i++) { array_push($lastDays, $current);//添加上一個(gè)月的日期天數(shù) $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()関數(shù)は最初のパラメータの配列の末尾をプッシュします。 1 つ以上の要素を追加し、新しい配列の長(zhǎng)さを返します。
array_reverse() 関數(shù)は配列を逆の順序で返します。