IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   php - date() - скрипт (https://www.imho.ws/showthread.php?t=120822)

John_Cherep 28.06.2007 18:31

php - date() - скрипт
 
Вообщем, такая трабла.

у меня есть дата date("d.m.Y",strtotime($odate2))
например, 27.06.07

к этой дате надо прибавить количество дней для выполенения заказа $sdacha
например, 23 дня

во-первых тупым сложением, получается 50.06.07
проблему можно избежать, переведя дату в сукунду от 1970 года.
Это первое, что я не знаю как сделать, чтобы получить нормальную дату.

вторая - просто мега проблема как мне кажется, это то что $sdacha==23 дня - не просто дня, а рабочих дня. т.е. мне надо получить готовую дату, потом определить все дни между $odate2 и готовой датой, и если там есть суббота, воскресение, то прибавить эти дни как рабочие, и снова проверить, если снова попадают выходные, то снова приплюсовывать к дате.
я, вообще, в ступоре. Помогите, плз, кто-нить решить задачу.

добавлено через 21 минуту
и ещё.
желательно предусмотреть такую штуку.
допустим я в ручную вобью все праздники, например , если в промежуток попадает дата 8.03.07, то +1 рабочий день.
как енто сделать? ((

RaZEr 28.06.2007 18:58

Праздники можно заколотить в массив, и потом просто проверить дату на наличие таковой в этом массиве. С выходными, особой проблемы нет, т.к. та же date() умеет возвращать день недели. А вот что ты хочешь сделать я не очень понял. Если просто накинуть 23 дня, но так чтобы дата не попала на выходные, то накинь а потом прибавляй по дню пока не попадёшь на будний день.

John_Cherep 28.06.2007 19:12

да нет же. не так.
к $odate2=27.06.07
надо прибавить $sdacha=23 рабочих дня

и получить дату. с вычетом выходных и праздников. я не знаю как енто забабахать.

John_Cherep 29.06.2007 13:23

на первом своём вопросе опять натолкнулся на косяк.
пишу:

$plansdacha=$sdacha*24*3600;
$plan=strtotime($odate2);
$plannew=date("d.m.Y",strtotime(($plan-$plansdacha)));

мне выводит при условии, что $sdacha=1 рабочий день, $odate2=26.06.2007:

86400
1182801600
31.03.118275


подскажите, где я накосячил, плз

Saruman 29.06.2007 20:09

Код:

$plannew=date("d.m.Y",strtotime(($plan-$plansdacha)));
plan - timestamp, plansdacha - integer, зачем результат (который есть снова integer да ещё и timestamp) через strtotime прогонять?

вот так правильно
Код:

$plansdacha=$sdacha*24*3600;
 $plan=strtotime($odate2);
 $plannew=date("d.m.Y",$plan-$plansdacha);


RaZEr 30.06.2007 06:02

Цитата:

надо прибавить $sdacha=23 рабочих дня
Проверяй день на предмет входжения в выходные дни и праздники. Если не входит, то увеличивай счётчик дней.

Face 02.07.2007 07:56

PHP код:

<?
function redate($date) {
    $date1=date('d.m.y',mktime(0,0,0,$date[1],$date[0],$date[2]));
    return explode(".",$date1);
}
function den($date) {
    return date('w',mktime(0,0,0,$date[1],$date[0],$date[2]));
}
function hol($date) {
    $date[1]=intval($date[1]);$date[0]=intval($date[0]);
    $holiday=Array(
    1=>Array(1=>1,2=>1,7=>1),
    2=>Array(23=>1),
    3=>Array(8=>1),
    5=>Array(1=>1,2=>1,9=>1),
    6=>Array(12=>1),
    11=>Array(7=>1),
    12=>Array(12=>1)        
    );
    if(isset($holiday[$date[1]][$date[0]])) return 1;
    else return 0;
}
function plusdate($date,$plus) {
    $date=explode(".",$date);
    for($i=-1;$i<$plus;$i++) {
        if(den($date)==0 or den($date)==6) $plus++;
        if(hol($date)==1) $plus++;
        $date[0]=$date[0]+1;
        $date=redate($date);
    }
    $date[0]=$date[0]-1;
    $date=redate($date);
    echo $date[0].".".$date[1].".".$date[2];
}
echo plusdate("30.12.07",1);
?>


Hubbitus 04.07.2007 15:53

Используй http://pear.php.net/Date и не парься.

Jonson 13.07.2007 15:07

есть фишка, непомню эту функцию, которая определяет день недели, наверное надо в этом направлении искать

Hubbitus 13.07.2007 16:05

Цитата:

Сообщение от Jonson (Сообщение 1435558)
есть фишка, непомню эту функцию,

Эта функция date () :ржать:


Часовой пояс GMT +4, время: 18:48.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.