Количество дней между двумя датами
Code (php)
-
-
<?php
-
/**
-
* Calculates the number of work days between 2 given times
-
*
-
* @see get_holidays()
-
*
-
* @param date $start_date First date
-
* @param date $end_date Second date
-
* @param bool $workdays_only Whether to count only work days (eg. Mon-Fri)
-
* @param bool $skip_holidays Whether to use the get_holidays() function to skip holiday days as well
-
* @return int $workday_counter Number of workdays between the 2 dates
-
*/
-
function date_difference($start_date, $end_date, $workdays_only = false, $skip_holidays = false){
-
$seconds_in_a_day = 86400;
-
$sunday_val = "0";
-
$saturday_val = "6";
-
$workday_counter = 0;
-
-
-
for($day_val = $start_date; $day_val <= $end_date; $day_val+=$seconds_in_a_day){
-
if($workdays_only == true){
-
if(($pointer_day != $sunday_val) AND ($pointer_day != $saturday_val)){
-
if($skip_holidays == true){
-
}
-
$workday_counter++;
-
}
-
}else{
-
$workday_counter++;
-
}
-
}
-
}else{
-
if($skip_holidays == true){
-
}
-
$workday_counter++;
-
}
-
}else{
-
$workday_counter++;
-
}
-
}
-
}
-
return $workday_counter;
-
}
-
-
/**
-
* Takes a date in yyyy-mm-dd format and returns a PHP timestamp
-
*
-
* @param string $MySqlDate
-
* @return unknown
-
*/
-
function get_timestamp($MySqlDate){
-
-
-
$var_year = $date_array[0];
-
$var_month = $date_array[1];
-
$var_day = $date_array[2];
-
-
return($var_timestamp); // return it to the user
-
}
-
-
/**
-
* Returns the date of the $ord $day of the $month.
-
* For example ordinal_day(3, ‘Sun’, 5, 2001) returns the
-
* date of the 3rd Sunday of May (ie. Mother’s Day).
-
*
-
* @author heymeadows@yahoo.com
-
*
-
* @param int $ord
-
* @param string $day (must be 3 char abbrev, per date("D);)
-
* @param int $month
-
* @param int $year
-
* @return unknown
-
*/
-
function ordinal_day($ord, $day, $month, $year) {
-
-
$firstOfMonth = get_timestamp("$year-$month-01");
-
$dayOccurs = 0;
-
-
for ($i = $firstOfMonth; $i < $lastOfMonth ; $i += 86400){
-
$dayOccurs++;
-
if ($dayOccurs == $ord){
-
$ordDay = $i;
-
}
-
}
-
}
-
return $ordDay;
-
}
-
-
function memorial_day($inc_year){
-
break;
-
}
-
}
-
}
-
-
-
/**
-
* Looks through a lists of defined holidays and tells you which
-
* one is coming up next.
-
*
-
* @author heymeadows@yahoo.com
-
*
-
* @param int $inc_year The year we are looking for holidays in
-
* @return array
-
*/
-
function get_holidays($inc_year){
-
//$year = date("Y");
-
$year = $inc_year;
-
-
$holidays[] = new Holiday("New Year’s Day", get_timestamp("$year-1-1"));
-
$holidays[] = new Holiday("Australia Day", get_timestamp("$year-1-26"));
-
$holidays[] = new Holiday("Labour Day", ordinal_day(1, ‘Mon’, 3, $year));
-
$holidays[] = new Holiday("Anzac Day", get_timestamp("$year-4-25"));
-
//$holidays[] = new Holiday("St. Patrick’s Day", get_timestamp("$year-3-17"));
-
// TODO: $holidays[] = new Holiday("Good Friday", easter_date($year));
-
// TODO: $holidays[] = new Holiday("Easter Monday", easter_date($year));
-
$holidays[] = new Holiday("Foundation Day", ordinal_day(1, ‘Mon’, 6, $year));
-
$holidays[] = new Holiday("Queen’s Birthday", ordinal_day(1, ‘Mon’, 10, $year));
-
//$holidays[] = new Holiday("Memorial Day", memorial_day($year));
-
//$holidays[] = new Holiday("Mother’s Day", ordinal_day(2, ‘Sun’, 5, $year));
-
//$holidays[] = new Holiday("Father’s Day", ordinal_day(3, ‘Sun’, 6, $year));
-
//$holidays[] = new Holiday("Independence Day", get_timestamp("$year-7-4"));
-
//$holidays[] = new Holiday("Labor Day", ordinal_day(1, ‘Mon’, 9, $year));
-
$holidays[] = new Holiday("Christmas", get_timestamp("$year-12-25"));
-
$holidays[] = new Holiday("Boxing Day", get_timestamp("$year-12-26"));
-
-
-
for ($i = 0; $i < $numHolidays; $i++){
-
$out_array[] = $holidays[$i]->date;
-
}
-
return $out_array;
-
}
-
-
class Holiday{
-
//var $name;
-
//var $date;
-
public $name;
-
public $date;
-
-
// Contructor to define the details of each holiday as it is created.
-
function holiday($name, $date){
-
$this->name = $name; // Official name of holiday
-
$this->date = $date; // UNIX timestamp of date
-
}
-
}
-
-
?>
-
