[ Index ]
 

Code source de eGroupWare 1.2.106-2

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/calendar/inc/ -> class.holidaycalc_JP.inc.php (source)

   1  <?php
   2      /**************************************************************************\
   3      * eGroupWare - holidaycalc_JP                                              *
   4      * http://www.egroupware.org                                              *
   5      * Based on Yoshihiro Kamimura <your@itheart.com>                           *
   6      *          http://www.itheart.com                                          *
   7      * --------------------------------------------                             *
   8      *  This program is free software; you can redistribute it and/or modify it *
   9      *  under the terms of the GNU General Public License as published by the   *
  10      *  Free Software Foundation; either version 2 of the License, or (at your  *
  11      *  option) any later version.                                              *
  12      \**************************************************************************/
  13  
  14      /* $Id: class.holidaycalc_JP.inc.php 22710 2006-10-23 05:02:00Z ralfbecker $ */
  15  
  16      /**
  17       * Calculations for calendar JP holidays
  18       *
  19       * @package calendar
  20       * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
  21       */
  22      class holidaycalc
  23      {
  24  		function calculate_date($holiday, &$holidays, $year)
  25          {
  26              static    $cached_month;
  27              static    $cached_day;
  28              static    $cached_observance_rule;
  29  
  30              if ($holiday['day'] == 0 && $holiday['dow'] != 0 && $holiday['occurence'] != 0)
  31              {
  32                  $dow = $GLOBALS['egw']->datetime->day_of_week($year, $holiday['month'], 1);
  33                  $dayshift = (($holiday['dow'] + 7) - $dow) % 7;
  34                  $day = ($holiday['occurence'] - 1) * 7 + $dayshift + 1;
  35  
  36                  // Happy monday law.
  37                  if ($holiday['month'] == 1)
  38                  {
  39                      if ($year < 2000)
  40                      {
  41                          $day = 15;
  42                      }
  43                  }
  44                  elseif ($holiday['month'] == 7)
  45                  {
  46                      if ($year < 2003)
  47                      {
  48                          $day = 20;
  49                      }
  50                  }
  51                  elseif ($holiday['month'] == 9)
  52                  {
  53                      if ($year < 2003)
  54                      {
  55                          $day = 15;
  56                      }
  57                  }
  58                  elseif ($holiday['month'] == 10)
  59                  {
  60                      if ($year < 2000)
  61                      {
  62                          $day = 10;
  63                      }
  64                  }
  65              }
  66              elseif ($holiday['day'] == 0 && $holiday['dow'] == 0 && $holiday['occurence'] == 0)
  67              {
  68                  // For the next generation.
  69                  // over 2151, please set $factor...
  70                  if ($holiday['month'] == 3)
  71                  {
  72                      // for Vernal Equinox
  73                      if ($year >= 1980 && $year <= 2099)
  74                      {
  75                          $factor = 20.8431;
  76                      }
  77                      elseif ($year >= 2100 && $year <= 2150)
  78                      {
  79                          $factor = 21.851;
  80                      }
  81                  }
  82                  elseif ($holiday['month'] == 9)
  83                  {
  84                      // for Autumnal Equinox
  85                      if ($year >= 1980 && $year <= 2099)
  86                      {
  87                          $factor = 23.2488;
  88                      }
  89                      elseif ($year >= 2100 && $year <= 2150)
  90                      {
  91                          $factor = 24.2488;
  92                      }
  93                  }
  94  
  95                  $day = (int)($factor + 0.242194 * ($year - 1980)
  96                      - (int)(($year - 1980) / 4));
  97              }
  98              else
  99              {
 100                  // normal holiday
 101                  $day = $holiday['day'];
 102              }
 103  
 104              if ($year >= 1985 && $holiday['month'] == $cached_month && $day == $cached_day + 2 && $cached_observance_rule == True && $holiday['observance_rule'] == True)
 105              {
 106                  $pdow = $GLOBALS['egw']->datetime->day_of_week($year,$holiday['month'],$day-1);
 107                  if ($pdow != 0)
 108                  {
 109                      $addcnt = count($holidays) + 1;
 110                      $holidays[$addcnt]['locale'] = $holiday['locale'];
 111                      if ($pdow == 1)
 112                      {
 113                          $holidays[$addcnt]['name'] = lang('overlap holiday');
 114                      }
 115                      else
 116                      {
 117                          $holidays[$addcnt]['name'] = lang('people holiday');
 118                      }
 119                      $holidays[$addcnt]['day'] = $day - 1;
 120                      $holidays[$addcnt]['month'] = $holiday['month'];
 121                      $holidays[$addcnt]['occurence'] = 0;
 122                      $holidays[$addcnt]['dow'] = 0;
 123                      $holidays[$addcnt]['date'] = mktime(0,0,0,$holiday['month'],$day-1,$year);
 124                      $holidays[$addcnt]['observance_rule'] = 0;
 125                  }
 126              }
 127  
 128              $cached_month = $holiday['month'];
 129              $cached_day = $day;
 130              $cached_observance_rule = $holiday['observance_rule'];
 131  
 132              if ($year >= 1985 && $holiday['month'] == 5 && $day == 3)
 133              {
 134                  ;
 135              }
 136              elseif ($holiday['observance_rule'] == True)
 137              {
 138                  $dow = $GLOBALS['egw']->datetime->day_of_week($year,$holiday['month'],$day);
 139                  // This now calulates Observed holidays and creates a new entry for them.
 140                  if($dow == 0)
 141                  {
 142                      $addcnt = count($holidays) + 1;
 143                      $holidays[$addcnt]['locale'] = $holiday['locale'];
 144                      $holidays[$addcnt]['name'] = lang('overlap holiday');
 145                      $holidays[$addcnt]['day'] = $day + 1;
 146                      $holidays[$addcnt]['month'] = $holiday['month'];
 147                      $holidays[$addcnt]['occurence'] = $holiday['occurence'];
 148                      $holidays[$addcnt]['dow'] = $holiday['dow'];
 149                      $holidays[$addcnt]['date'] = mktime(0,0,0,$holiday['month'],$day+1,$year);
 150                      $holidays[$addcnt]['observance_rule'] = 0;
 151                  }
 152              }
 153  
 154              $date = mktime(0,0,0,$holiday['month'],$day,$year);
 155  
 156              return $date;
 157          }
 158      }
 159  ?>


Généré le : Sun Feb 25 17:20:01 2007 par Balluche grâce à PHPXref 0.7