|
|
|
| эмм такое:
есть дата1: 2008-08-29;
и дни1: 4;
и есть дата2: 2008-08-28;
и дни2: 2;
получается интервал времени1 2008-08-29 - 2008-09-02
и нужно проверить не попадает ли интервал выше в интервал времени2?
применение:
есть куча заказов с датами и днями.. тоесть заказ от даты до даты+дни.
и когда поступает заказ нужно проверить, возможно ли его подтвердить, для этого нужно проверить не будет ли он состыковаться с уже существующими.
как бы это компактней сделать?) | |
|
|
|
|
|
|
|
для: sl1p
(29.08.2008 в 23:04)
| | А дата хранится в таком вырмате или всё-таки в Unix-time? | |
|
|
|
|
|
|
|
для: DDK
(30.08.2008 в 00:00)
| | в таком.. так сравнивать то можно я просто немогу нормально написать)..
или меня глючит или х3.. что тут не правильно?)
#########
$date = Суём дату заказа который нужно подтвердить
$days = Суём количество дней заказа который нужно подтвердить
$date2 = Суём дату заказа с которым сверяем
$dateout2 = Суём дату прекращения заказа с которым сравниваем..
#########
function check_free($date,$days,$date2,$dateout2){
for($i=0;$i<$days;$i++){
$cd=date("Y-m-d",strtotime($date)+($i*86400));
if($cd>=$date2 && $cd<$dateout2){
return false;
}
}
return true;
}
|
Поступивший заказ:
$date=31 Авг 2008
$days=2
###date2####$dateout2###
29 Авг 2008 # 31 Авг 2008# - false
30 Окт 2008# 01 Ноя 2008#- true
31 Авг 2008 # 02 Сен 2008#- false | |
|
|
|
|
|
|
|
для: sl1p
(30.08.2008 в 00:16)
| | а всё поправил, считает вроде норм.. х3 нужно ещё потестить) | |
|
|
|
|
|
|
|
для: DDK
(30.08.2008 в 00:00)
| | >А дата хранится в таком вырмате или всё-таки в Unix-time?
В данном случае это несущественно.
Если есть интервалы [A, B) и [C, D) , то их пересечение [E, F) можно вычислить так:
<?
function intersect($ab, $cd)
{
list($a,$b) = $ab;
list($c,$d) = $cd;
if($b <= $c && $d <= $b)
return false;
$e = $a > $c ? $a : $c;
$f = $b < $d ? $b : $d;
return array($e, $f);
}
|
| |
|
|
|