Вариант 1:
<?php
/*
* Does not count current day, the date returned is the last business day
* Requires PHP 5.1 (Using ISO-8601 week)
*/
function businessDays($timestamp = false, $bDays = 2) {
if($timestamp === false) $timestamp = time();
while ($bDays>0) {
$timestamp += 86400;
if (date('N', $timestamp)<6) $bDays--;
}
return $timestamp;
}
Вариант 2:
<?php
/*
* Does not count current day, the date returned is a business day
* following the last business day
* Requires PHP 5.1 (Using ISO-8601 week)
*/
function businessDays($timestamp = false, $bDays = 2) {
if($timestamp === false) $timestamp = time();
while ($bDays+1>0) {
$timestamp += 86400;
if (date('N', $timestamp)<6) $bDays--;
}
return $timestamp;
}
Вариант 3:
<?php
/*
* Does not count current day, the date returned is
* a date following the last business day (can be weekend or not.
* See above for alternatives)
* Requires PHP 5.1 (Using ISO-8601 week)
*/
function businessDays($timestamp = false, $bDays = 2) {
if($timestamp === false) $timestamp = time();
while ($bDays>0) {
$timestamp += 86400;
if (date('N', $timestamp)<6) $bDays--;
}
return $timestamp += 86400;
}
Дополнительные соображения по поводу праздников могут быть сделаны с использованием различных вариантов, описанных ниже. Заметка! убедитесь, что все временные метки совпадают по времени суток (то есть в полночь).
Создайте массив дат праздников (в виде unixtimestamps), т. Е .:
$holidays = array_flip(strtotime('2011-01-01'),strtotime('2011-12-25'));
Изменить строку:
if (date('N', $timestamp)<6) $bDays--;
быть:
if (date('N', $timestamp)<6 && !isset($holidays[$timestamp])) $bDays--;
Готово!
<?php
/*
* Does not count current day, the date returned is the last business day
* Requires PHP 5.1 (Using ISO-8601 week)
*/
function businessDays($timestamp = false, $bDays = 2) {
if($timestamp === false) $timestamp = strtotime(date('Y-m-d',time()));
$holidays = array_flip(strtotime('2011-01-01'),strtotime('2011-12-25'));
while ($bDays>0) {
$timestamp += 86400;
if (date('N', $timestamp)<6 && !isset($holidays[$timestamp])) $bDays--;
}
return $timestamp;
}