IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonction Calcul date échéance


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 18
    Points : 17
    Points
    17
    Par défaut Fonction Calcul date échéance
    Bonjour,

    Ci-dessous petite fonction qui permet de calculer la date échéance en compta :

    Ex : à 60 jours fdm le 15

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $date_tmp = new DateTime('now');
     
    // à x jours
    if ($nb_jours > 0)
    {
    	$interval = new DateInterval('P' .$nb_jours . 'D');
    	$date_tmp->add($interval);
    }
     
    // fdm ?
    if ($fdm==1)
    {
    	//last day of this month
    	$lastday = date('t', strtotime($date_tmp->format("d/m/Y")));
    	$date_tmp->setDate($date_tmp->format("Y"), $date_tmp->format("m"), $lastday);
     
    	// une fdm est tjrs accompagnée de la date finale !
    	if ($le > 0)
    	{
    		// rajoute 1 jour pour passer le mois car on ne peut pas faire un add --> si fdm = 30 = +15 jours = 16/xx/2017
    		$interval = new DateInterval('P1D');
    		$date_tmp->setDate($date_tmp->format("Y"), $date_tmp->format("m"), $le);
    	}
    }
    // sortie au format MySQL ou autre format
    $date_echeance = $date_tmp->format("Ymd");

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    C'est pour nous donner cette fonction ou bien c'est parce qu'il y a un problème ?

    On est le 1er mai 2017. Si je rentre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $nb_jours = 60;
     $fdm      = 15;
    J'obtiens le 30/06/2017. Ca ne devrait pas être le 15 ou le 16/07 ?


    Dans ton code tu écris if ($fdm==1) est-ce que ça ne devrait pas être if ($fdm>=1) ? Si c'est le cas alors la variable $le n'est pas définie.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    en php il existe pléthore de raccourcis pour manipuler les dates : tiens voilà comment je l'aurais codé ton échéance "60 jours fin de mois le 15" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $now = new DateTime('now');
    $now->modify('+60 days');
    $now->modify('last day of this month');
    $now->modify('+15 days');
    echo $now->format('Ymd');

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    Super, je ne pensais pas qu'on pouvait le faire de manière simple !

    Dans ton code tu écris if ($fdm==1) est-ce que ça ne devrait pas être if ($fdm>=1) ? Si c'est le cas alors la variable $le n'est pas définie.
    badaze, le $fdm est un booléen qui permet de savoir si c'est un fin de mois ou non car on peut dire à 60 jours sans fin de mois ni de jour (le 05, le 15 ou 20 etc...)

    Merci encore pour le code !

    Citation Envoyé par rawsrc Voir le message
    Salut,

    en php il existe pléthore de raccourcis pour manipuler les dates : tiens voilà comment je l'aurais codé ton échéance "60 jours fin de mois le 15" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $now = new DateTime('now');
    $now->modify('+60 days');
    $now->modify('last day of this month');
    $now->modify('+15 days');
    echo $now->format('Ymd');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Calcul date échéance, avec RechercheV
    Par diego21 dans le forum Excel
    Réponses: 4
    Dernier message: 13/03/2015, 22h25
  2. Calculer date échéance
    Par thaundeadboss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/09/2014, 16h47
  3. calcul date échéance
    Par popofpopof dans le forum IHM
    Réponses: 18
    Dernier message: 13/10/2009, 20h39
  4. [Dates] Fonction calcule le nombre de demi-heures
    Par bigltnt dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2007, 15h31
  5. Réponses: 5
    Dernier message: 21/03/2006, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo