Поиграть


Фотографии знаменитостей, Герои нашего времени

Количество дней между двумя датами

Code (php)
  1.  
  2. <?php
  3.     /**
  4.          * Calculates the number of work days between 2 given times
  5.          *
  6.          * @see get_holidays()
  7.          *
  8.          * @param date $start_date First date
  9.          * @param date $end_date Second date
  10.          * @param bool $workdays_only Whether to count only work days (eg. Mon-Fri)
  11.          * @param bool $skip_holidays Whether to use the get_holidays() function to skip holiday days as well
  12.          * @return int $workday_counter Number of workdays between the 2 dates
  13.          */
  14. function date_difference($start_date, $end_date, $workdays_only = false, $skip_holidays = false){
  15.     $start_date = strtotime($start_date);
  16.     $end_date = strtotime($end_date);
  17.     $seconds_in_a_day = 86400;
  18.     $sunday_val = "0";
  19.     $saturday_val = "6";
  20.     $workday_counter = 0;
  21.     $holiday_array = array();
  22.  
  23.     $ptr_year = intval(date("Y", $start_date));
  24.     $holiday_array[$ptr_year] = get_holidays(date("Y", $start_date));
  25.  
  26.     for($day_val = $start_date; $day_val <= $end_date; $day_val+=$seconds_in_a_day){
  27.         $pointer_day = date("w", $day_val);
  28.         if($workdays_only == true){
  29.             if(($pointer_day != $sunday_val) AND ($pointer_day != $saturday_val)){
  30.                 if($skip_holidays == true){
  31.                     if(intval(date("Y", $day_val))!=$ptr_year){
  32.                         $ptr_year = intval(date("Y", $day_val));
  33.                         $holiday_array[$ptr_year] = get_holidays(date("Y", $day_val));
  34.                     }
  35.                     if(!in_array($day_val, $holiday_array[date("Y", $day_val)])){
  36.                         $workday_counter++;
  37.                     }
  38.                 }else{
  39.                     $workday_counter++;
  40.                 }
  41.             }
  42.         }else{
  43.             if($skip_holidays == true){
  44.                 if(intval(date("Y", $day_val))!=$ptr_year){
  45.                     $ptr_year = intval(date("Y", $day_val));
  46.                     $holiday_array[$ptr_year] = get_holidays(date("Y", $day_val));
  47.                 }
  48.                 if(!in_array($day_val, $holiday_array[date("Y", $day_val)])){
  49.                     $workday_counter++;
  50.                 }
  51.             }else{
  52.                 $workday_counter++;
  53.             }
  54.         }
  55.     }
  56.     return $workday_counter;
  57. }
  58.  
  59.     /**
  60.          * Takes a date in yyyy-mm-dd format and returns a PHP timestamp
  61.          *
  62.          * @param string $MySqlDate
  63.          * @return unknown
  64.          */
  65. function get_timestamp($MySqlDate){
  66.  
  67.     $date_array = explode("-",$MySqlDate); // split the array
  68.  
  69.     $var_year = $date_array[0];
  70.     $var_month = $date_array[1];
  71.     $var_day = $date_array[2];
  72.  
  73.     $var_timestamp = mktime(0,0,0,$var_month,$var_day,$var_year);
  74.     return($var_timestamp); // return it to the user
  75. }
  76.  
  77.     /**
  78.          * Returns the date of the $ord $day of the $month.
  79.          * For example ordinal_day(3, ‘Sun’, 5, 2001) returns the
  80.      * date of the 3rd Sunday of May (ie. Mother’s Day).
  81.      *
  82.      * @author  heymeadows@yahoo.com
  83.          *
  84.          * @param int $ord
  85.          * @param string $day (must be 3 char abbrev, per date("D);)
  86.          * @param int $month
  87.          * @param int $year
  88.          * @return unknown
  89.          */
  90. function ordinal_day($ord, $day, $month, $year) {
  91.  
  92.     $firstOfMonth = get_timestamp("$year-$month-01");
  93.     $lastOfMonth  = $firstOfMonth + date("t", $firstOfMonth) * 86400;
  94.     $dayOccurs = 0;
  95.  
  96.     for ($i = $firstOfMonth; $i < $lastOfMonth ; $i += 86400){
  97.         if (date("D", $i) == $day){
  98.             $dayOccurs++;
  99.             if ($dayOccurs == $ord){
  100.                 $ordDay = $i;
  101.             }
  102.         }
  103.     }
  104.     return $ordDay;
  105. }
  106.  
  107. function memorial_day($inc_year){
  108.     for($date_stepper = intval(date("t", strtotime("$inc_year-05-01"))); $date_stepper >= 1; $date_stepper){
  109.         if(date("l", strtotime("$inc_year-05-$date_stepper"))=="Monday"){
  110.             return strtotime("$inc_year-05-$date_stepper");
  111.             break;
  112.         }
  113.     }
  114. }
  115.  
  116.  
  117.     /**
  118.          * Looks through a lists of defined holidays and tells you which
  119.          * one is coming up next.
  120.          *
  121.          * @author heymeadows@yahoo.com
  122.          *
  123.          * @param int $inc_year The year we are looking for holidays in
  124.          * @return array
  125.          */
  126. function get_holidays($inc_year){
  127.     //$year = date("Y");
  128.     $year = $inc_year;
  129.  
  130.     $holidays[] = new Holiday("New Year’s Day", get_timestamp("$year-1-1"));
  131.     $holidays[] = new Holiday("Australia Day", get_timestamp("$year-1-26"));
  132.     $holidays[] = new Holiday("Labour Day", ordinal_day(1, ‘Mon’, 3, $year));
  133.     $holidays[] = new Holiday("Anzac Day", get_timestamp("$year-4-25"));
  134.     //$holidays[] = new Holiday("St. Patrick’s Day", get_timestamp("$year-3-17"));
  135.     // TODO: $holidays[] = new Holiday("Good Friday", easter_date($year));
  136.     $holidays[] = new Holiday("Easter", easter_date($year));
  137.     // TODO: $holidays[] = new Holiday("Easter Monday", easter_date($year));
  138.     $holidays[] = new Holiday("Foundation Day", ordinal_day(1, ‘Mon’, 6, $year));
  139.     $holidays[] = new Holiday("Queen’s Birthday", ordinal_day(1, ‘Mon’, 10, $year));
  140.     //$holidays[] = new Holiday("Memorial Day", memorial_day($year));
  141.     //$holidays[] = new Holiday("Mother’s Day", ordinal_day(2, ‘Sun’, 5, $year));
  142.     //$holidays[] = new Holiday("Father’s Day", ordinal_day(3, ‘Sun’, 6, $year));
  143.     //$holidays[] = new Holiday("Independence Day", get_timestamp("$year-7-4"));
  144.     //$holidays[] = new Holiday("Labor Day", ordinal_day(1, ‘Mon’, 9, $year));
  145.     $holidays[] = new Holiday("Christmas", get_timestamp("$year-12-25"));
  146.     $holidays[] = new Holiday("Boxing Day", get_timestamp("$year-12-26"));
  147.  
  148.     $numHolidays = count($holidays) - 1;
  149.     $out_array = array();
  150.  
  151.     for ($i = 0; $i < $numHolidays; $i++){
  152.         $out_array[] = $holidays[$i]->date;
  153.     }
  154.     unset($holidays);
  155.     return $out_array;
  156. }
  157.  
  158. class Holiday{
  159.     //var $name;
  160.     //var $date;
  161.     public $name;
  162.     public $date;
  163.  
  164.     // Contructor to define the details of each holiday as it is created.
  165.     function holiday($name, $date){
  166.         $this->name   = $name;   // Official name of holiday
  167.         $this->date   = $date;   // UNIX timestamp of date
  168.     }
  169. }
  170.  
  171. ?>
  172.  

+1+2+3+4+5 (Ещё не голосовали)
Загрузка... Загрузка...

Оставьте комментарий

Блог разработчика / Трубы ппу, трубная изоляция, ВУС изоляция
Избеги наказания: выгодно лицензионный archicad по предоплате
Евро производители мягкой мебели Челябинск не дорого
оn cutarea shared web hosting Vizita kvchosting.com