Rajouter 48h a une date

WRInaute occasionnel
Bonjour à vous tous, ca fait plaisir de vous retrouver après quelques vacances :)

J'ai besoin de vous comme vous vous en doutez, mon problème est le suivant:

J'ai une date format 22/09/2010 sur laquelle je voudrai ajouter 48h, mais attention je veux ajouter 48h de jours ouvrés autrement dit hors samedi et dimanche. Donc en gros ca peut être 48h, mais ca peut etre aussi 72h si le client commande Jeudi ou 90h si la commande est passé vendredi.

Comment faire ca ?! J'en ai absolument aucune idée, tout est bon dans le cochon oups pardon dans le PHP :D

Merci
 
WRInaute occasionnel
Code:
<?php
function getEaster ($iYear = null) {
    if (is_null ($iYear)) {
        $iYear = (int)date ('Y');
    }
    $iN = $iYear - 1900;
    $iA = $iN%19;
    $iB = floor (((7*$iA)+1)/19);
    $iC = ((11*$iA)-$iB+4)%29;
    $iD = floor ($iN/4);
    $iE = ($iN-$iC+$iD+31)%7;
    $iResult = 25-$iC-$iE;
    if ($iResult > 0) {
        $iEaster = strtotime ($iYear.'/04/'.$iResult);
    } else {
        $iEaster = strtotime ($iYear.'/03/'.(31+$iResult));
    }
    return $iEaster;
}
echo 'Paques : ', date ('d-m-Y', getEaster (2006));
echo '<br />';
function getNextOpenDay ($iDate, $iDays) {
    $aBankHolidays = array (
        '1_1',
        '1_5',
        '8_5',
        '14_7',
        '15_8',
        '1_11',
        '11_11',
        '25_12'
        );
    if (function_exists ('easter_date')) {
        $iEaster = easter_date ((int)date('Y'), $iDate);
    } else {
        $iEaster = getEaster ((int)date('Y'), $iDate);
    }
    $aBankHolidays[] = date ('j_n',$iEaster);
    $aBankHolidays[] = date ('j_n', $iEaster + (86400*39));
    $aBankHolidays[] = date ('j_n', $iEaster + (86400*49));
    print_r ($aBankHolidays);
    $iEnd = $iDays * 86400;
    $i = 0;
    while ($i < $iEnd) {
        $i = strtotime ('+1 day', $i);
        if (in_array (date ('w', $iDate+$i),array (0,6) ) || in_array (date ('j_n', $iDate+$i), $aBankHolidays)) {
            $iEnd = strtotime ('+1 day', $iEnd);
            $iDays ++;
        }
    }
    return $iDays;
}
$iDate = strtotime ('2006-06-30');
$iDays = getNextOpenDay ($iDate, 2);
echo 'Prochain jour ouvrable à partir du 30/06/2006, avec un delta de 2 jours : ', date ('d/m/Y', $iDate + (86400*$iDays));
?>

Trouve le prochain jour ouvré, en fonction d'une date et d'un delta en jours.
Par exemple, on passe une commande le 12 juillet 2006, l'envoi dure 2 jours. getNextOpenDay va renvoyer 5 jours, on recevra donc notre commande le 17, car 2 jours après le 12 juille, c'est le 14 (férié), qui est un vendredi. Samedi et dimanche sont non ouvrables, on arrive donc au lundi 7.

getNextOpenDay ($iDate, $iDays) :
$iDate = timestamp de la date
$iDays = nombre de jours de delta

Peace
 
WRInaute occasionnel
Bonjour à tous,

Zelkin ta demande parait parfaite pour l'application de la loi Carrez dans l'e-commerce.
(Attention à la notion des 48 h cela pourrait être court en cas d'événement imprévu).

Cordialement
Alain
 
Discussions similaires
Haut