Rajouter 48h a une date

ZelkiN
WRInaute impliqué
WRInaute impliqué
 
Messages: 500
Inscription: 27 Juil 2007

Rajouter 48h a une date

Message le Mer Sep 22, 2010 8:45

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


michel.leonard
WRInaute discret
WRInaute discret
 
Messages: 184
Inscription: 1 Juin 2010

Re: Rajouter 48h a une date

Message le Mer Sep 22, 2010 13:06

Code: Tout sélectionner
<?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


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Rajouter 48h a une date

Message le Dim Sep 26, 2010 10:33



alain78france
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 489
Inscription: 1 Mar 2006

Re: Rajouter 48h a une date

Message le Mar Sep 28, 2010 8:28

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


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités