コード例 #1
0
 function calculate_date($holiday, &$holidays, $year, &$i)
 {
     //		if($holiday['day'] == 0 && $holiday['dow'] != 0 && $holiday['occurence'] != 0)
     if ($holiday['day'] == 0 && $holiday['occurence'] != 0) {
         if ($holiday['occurence'] != 99) {
             $dow = phpgw_datetime::day_of_week($year, $holiday['month'], 1);
             $day = 7 * $holiday['occurence'] - 6 + ($holiday['dow'] + 7 - $dow) % 7;
             $day += $day < 1 ? 7 : 0;
             // What is the point of this?
             // Add 7 when the holiday falls on a Monday???
             //$day += ($holiday['dow']==1 ? 7 : 0);
             // Sometimes the 5th occurance of a weekday (ie the 5th monday)
             // can spill over to the next month.  This prevents that.
             $ld = phpgw_datetime::days_in_month($holiday['month'], $year);
             if ($day > $ld) {
                 return;
             }
         } else {
             $ld = phpgw_datetime::days_in_month($holiday['month'], $year);
             $dow = phpgw_datetime::day_of_week($year, $holiday['month'], $ld);
             $day = $ld - ($dow + 7 - $holiday['dow']) % 7;
         }
     } else {
         $day = $holiday['day'];
         if ($holiday['observance_rule'] == True) {
             $dow = phpgw_datetime::day_of_week($year, $holiday['month'], $day);
             // This now calulates Observed holidays and creates a new entry for them.
             if ($dow == 0) {
                 ++$i;
                 $holidays[$i]['locale'] = $holiday['locale'];
                 $holidays[$i]['name'] = $holiday['name'] . ' (Observed)';
                 $holidays[$i]['day'] = $holiday['day'] + 1;
                 $holidays[$i]['month'] = $holiday['month'];
                 $holidays[$i]['occurence'] = $holiday['occurence'];
                 $holidays[$i]['dow'] = $holiday['dow'];
                 $holidays[$i]['date'] = mktime(0, 0, 0, $holiday['month'], $day + 1, $year);
                 $holidays[$i]['obervance_rule'] = 0;
             } else {
                 if ($dow == 6) {
                     ++$i;
                     $holidays[$i]['locale'] = $holiday['locale'];
                     $holidays[$i]['name'] = $holiday['name'] . ' (Observed)';
                     $holidays[$i]['day'] = $holiday['day'] - 1;
                     $holidays[$i]['month'] = $holiday['month'];
                     $holidays[$i]['occurence'] = $holiday['occurence'];
                     $holidays[$i]['dow'] = $holiday['dow'];
                     $holidays[$i]['date'] = mktime(0, 0, 0, $holiday['month'], $day - 1, $year);
                     $holidays[$i]['obervance_rule'] = 0;
                 }
             }
         }
     }
     $date = mktime(0, 0, 0, $holiday['month'], $day, $year);
     return $date;
 }
コード例 #2
0
 function calculate_date($holiday, &$holidays, $year, &$i)
 {
     static $cached_month;
     static $cached_day;
     static $cached_observance_rule;
     if ($holiday['day'] == 0 && $holiday['dow'] != 0 && $holiday['occurence'] != 0) {
         $dow = phpgw_datetime::day_of_week($year, $holiday['month'], 1);
         $dayshift = ($holiday['dow'] + 7 - $dow) % 7;
         $day = ($holiday['occurence'] - 1) * 7 + $dayshift + 1;
         // Happy monday law.
         if ($holiday['month'] == 1) {
             if ($year < 2000) {
                 $day = 15;
             }
         } elseif ($holiday['month'] == 7) {
             if ($year < 2003) {
                 $day = 20;
             }
         } elseif ($holiday['month'] == 9) {
             if ($year < 2003) {
                 $day = 15;
             }
         } elseif ($holiday['month'] == 10) {
             if ($year < 2000) {
                 $day = 10;
             }
         }
     } elseif ($holiday['day'] == 0 && $holiday['dow'] == 0 && $holiday['occurence'] == 0) {
         // For the next generation.
         // over 2151, please set $factor...
         if ($holiday['month'] == 3) {
             // for Vernal Equinox
             if ($year >= 1980 && $year <= 2099) {
                 $factor = 20.8431;
             } elseif ($year >= 2100 && $year <= 2150) {
                 $factor = 21.851;
             }
         } elseif ($holiday['month'] == 9) {
             // for Autumnal Equinox
             if ($year >= 1980 && $year <= 2099) {
                 $factor = 23.2488;
             } elseif ($year >= 2100 && $year <= 2150) {
                 $factor = 24.2488;
             }
         }
         $day = (int) ($factor + 0.242194 * ($year - 1980) - (int) (($year - 1980) / 4));
     } else {
         // normal holiday
         $day = $holiday['day'];
     }
     if ($year >= 1985 && $holiday['month'] == $cached_month && $day == $cached_day + 2 && $cached_observance_rule == True && $holiday['observance_rule'] == True) {
         $pdow = phpgw_datetime::day_of_week($year, $holiday['month'], $day - 1);
         if ($pdow != 0) {
             $addcnt = count($holidays) + 1;
             $holidays[$addcnt]['locale'] = $holiday['locale'];
             if ($pdow == 1) {
                 $holidays[$addcnt]['name'] = lang('overlap holiday');
             } else {
                 $holidays[$addcnt]['name'] = lang('people holiday');
             }
             $holidays[$addcnt]['day'] = $day - 1;
             $holidays[$addcnt]['month'] = $holiday['month'];
             $holidays[$addcnt]['occurence'] = 0;
             $holidays[$addcnt]['dow'] = 0;
             $holidays[$addcnt]['date'] = mktime(0, 0, 0, $holiday['month'], $day - 1, $year);
             $holidays[$addcnt]['observance_rule'] = 0;
         }
     }
     $cached_month = $holiday['month'];
     $cached_day = $day;
     $cached_observance_rule = $holiday['observance_rule'];
     if ($year >= 1985 && $holiday['month'] == 5 && $day == 3) {
     } elseif ($holiday['observance_rule'] == True) {
         $dow = phpgw_datetime::day_of_week($year, $holiday['month'], $day);
         // This now calulates Observed holidays and creates a new entry for them.
         if ($dow == 0) {
             $addcnt = count($holidays) + 1;
             $holidays[$addcnt]['locale'] = $holiday['locale'];
             $holidays[$addcnt]['name'] = lang('overlap holiday');
             $holidays[$addcnt]['day'] = $day + 1;
             $holidays[$addcnt]['month'] = $holiday['month'];
             $holidays[$addcnt]['occurence'] = $holiday['occurence'];
             $holidays[$addcnt]['dow'] = $holiday['dow'];
             $holidays[$addcnt]['date'] = mktime(0, 0, 0, $holiday['month'], $day + 1, $year);
             $holidays[$addcnt]['observance_rule'] = 0;
         }
     }
     $date = mktime(0, 0, 0, $holiday['month'], $day, $year);
     return $date;
 }
コード例 #3
0
 /**
  *
  */
 public static function get_date($n_year, $n_month, $n_day, $date, $options = '')
 {
     if (is_array($date) && count($date) == 3) {
         list($year, $month, $day) = $date;
     } elseif (!$date) {
         $day = $month = $year = 0;
     } else {
         $day = date('d', $date);
         $month = date('m', $date);
         $year = date('Y', $date);
     }
     return phpgw_datetime::dateformatorder(self::getYears($n_year, $year), self::getMonthText($n_month, $month), self::getDays($n_day, $day));
 }