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 :

[Dates] Soustraire / addtionner fonction mtkime() avec une date


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut [Dates] Soustraire / addtionner fonction mtkime() avec une date
    Bonjour,
    quand je rajoute +1 à date ("Y") il m'affiche l'année actuelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<br>".date("Y-m-d", mktime(date("m"), date("d"), date("Y") +1));
    car je voudrais afficher un message quand une date arrive à échéance, du genre 1 mois avant, ce que je fais :
    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
     
    $adh=$dateAdh['adhesion'];
     
    	$tableau = explode("-", $adh);
     
    	$annee = $tableau[0];
    	$mois = $tableau[1];
    	$jour = $tableau[2];
    	$adh = $annee . ' ' . $mois . ' ' . $jour;
     
     
    $date_jour = date("d");
    $date_mois = date("m");
    $date_anne = date("Y")+1;
     
    echo $date_anne." ".$date_mois." ".$date_jour;
    et pour avoir le message un mois avant la date d'échéance je ferai $date_mois - 1, mais je vois pas du tout quel condition faire pour faire apparaitre un message qui dit attention il reste 1 mois quand la date $adh arrive à échéance
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo date("Y", strtotime("+1 year")); // Affichera : 2010
    echo date("Y-m-d", strtotime("+1 year")); // Affichera : 2010-03-09

  3. #3
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    merci ça marche aussi avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date_anne = date("Y")+1;
    pour avoir le message un mois avant la date d'échéance je ferai $date_mois - 1, mais je vois pas du tout quel condition faire pour faire apparaitre un message qui dit attention il reste 1 mois quand la date $adh arrive à échéance
    car il faut la date d'aujourd'hui - 1 mois + $adh avec $adh+ 1 ans, en gros je sais plus je m'embrouille
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par akara Voir le message
    merci ça marche aussi avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date_anne = date("Y")+1;
    pour avoir le message un mois avant la date d'échéance je ferai $date_mois - 1, mais je vois pas du tout quel condition faire pour faire apparaitre un message qui dit attention il reste 1 mois quand la date $adh arrive à échéance
    car il faut la date d'aujourd'hui - 1 mois + $adh avec $adh+ 1 ans, en gros je sais plus je m'embrouille
    oui dans le cas d'un simple affichage d'un an en plus c'est pas dur, c'est pour ça que j'ai rajouté une 2ieme ligne :p

    bon pour ton truc, admettons que $adh soit la date de fin de qqch:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $rappel = "+1 month";
    $adh = "2009-12-06";
     
    if( date("Y-m-d", strtotime($rappel)) > date("Y-m-d") ) {
          echo "il reste ".str_replace("+", "", $rappel)." avant le ".$adh;
    }

  5. #5
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    ça marche mais seulement pour une date définie, je pense que je me suis mal exprimé,
    en fait dans la bdd j'ai la date d'adhésion des membres et chaque année le membre cotise, donc 1 mois avant $adh + x ( chaque année ) : je voudrais un message qui dit qu'il reste 1mois pour la cotisation. le système du if j'ai compris, mais pour le calcul c'est autre chose
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    hmm et bien je ne comprends pas ton problème...

    Effectivement ici j'ai donné une valeur fixe à $adh mais il te suffit de faire la requête dans ta base de donnée pour savoir quand le membre doit payer sa cotisation...
    Si la cotisation doit être payée tous les ans à la même par tous les membres il te suffit de faire les comparaisons sans l'année...

  7. #7
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    les dates d'adhésion sont différentes, même moi j'y comprends plus, je résume :
    je récupère les dates d'adhésions des membres je compare avec la date d'aujourd'hui, si le (mois - 1) de la date d'adhésion est la même que celui d'aujourd'hui j'affiche le message ,je sais pas si c'est une bonne solution
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  8. #8
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Hmmm ouais, ce que tu viens de dire est exactement ce que je dis mais en partant dans l'autre sens.

    TOI : $adh - 1 mois > now => on affiche
    MOI : now + 1 mois > $adh => on affiche


  9. #9
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    lol c'est pas de ta faute ,c'est la mienne .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $tableau = explode("-", $adh);
     
    $mois = $tableau[1];
    $mois1 = $tableau[1] - 1;
    $jour = $tableau[2];
     
    $date_mois = date("m");
     
     $adh = $date_mois." ".$mois1.' '.$mois.' '. $jour."<br>";
    if($date_mois == $mois1){
    		echo "paye ".$dateAdh['nomS'];
    }
    j'ai testé , c'est bon mais est ce une bonne solution, est ce qu'il y a pas de hic ?

    //edit : merci !
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  10. #10
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Je ne comprends pas pourquoi tu n'utilise pas strtotime() comme je te l'ai montré plus haut, c'est plus simple et plus flexible : imagine que dans un an tu décides de changer la valeur de rappel de 1 mois à 1 semaine => tu devras changer plein de trucs...

    Alors qu'avec mon systême tu remplaces
    $rappel = "+1 month"; par $rappel = "+1 week"; et c'est OK !

    De plus, mon code tient compte des jours qui n'existent pas comme par exemple le 30 février


    EDIT : revoilà un code plus fonctionnel par rapport à ce que tu voudrais (si j'ai bien compris)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $date_max = strtotime("now +1 month");
    $adh = strtotime("2009-05-02");
     
    // Dans notre exemple, le gars doit payer le 2 mai, étant le 31 mars le fichier dira que c'est bon
    // Par contre dès demain, il lui dira qu'il lui faudra bientot payer
    // Le script manque de précisier (24h) car on ne compare pas les heures
    // C'est faisable en chipotant si tu le souhaite mais c'est pas très utile :)
    if(  $date_max > $adh ) {
          echo "<p>Il est temps de payer !</p>";
    } else {
    	echo "<p>C'est bon, t'as le temps avant de passer à la caisse</p>";
    }

  11. #11
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $rappel="-1 month";
    			if( $adh(strtotime($rappel)) > date("Y-m-d") ) {
    				  echo "il reste ".str_replace("-", "", $rappel)." avant le ".$adh;
    			}
    le problème où mettre le strotime avec $adh
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  12. #12
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par akara Voir le message
    le problème où mettre le strotime avec $adh
    Regarde mon dernier code

    $adh est récup dans la DB, et mis directement dans le strtotime() afin ensuite de le comparer avec $date_max

  13. #13
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $date_max = strtotime("now +1 month");
    $adh = strtotime("$adh");
    écoute comme j'ai fait une boucle, il m'affiche tous les membres " Il est temps de payer !"

    $adh = strtotime($adh); cause problème ou c'est moi le problème
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  14. #14
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Ca doit être toi

    Montre voir ta boucle stp, tu dois te gourray quelque part selon moi ^^

  15. #15
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    y a pas grand chose

    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
     
    while($dateAdh=mysql_fetch_assoc($result)){
    			$adh=$dateAdh['adhesion'];
     
    			$date_max = strtotime("now +1 month");
    			$adh = strtotime($adh);
     
     
    			if(  $date_max > $adh ) {
    				  echo "<p>Il est temps de payer !</p>".$dateAdh['nomS'];
    			} else {
    				echo "<p>C'est bon, t'as le temps avant de passer à la caisse</p>";
    			}
     
    }
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  16. #16
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    ton champ 'adhesion' est bien DATE_TIME ? cad "yyyy-mm-dd" ?

    car si le script de dit qu'ils doivent tous payés, c'est qu'ils le doivent ^^

    Si c'est bien un DATE_TIME mais qu'il n'est JAMAIS mis à jour, il faudrait écrire $adh comme ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // à la place de :
    // $adh = strtotime($adh);
    $thisYear = date("Y");
    $adhYear = date("Y", strtotime($adh));
    $nbYear = " +".($thisYear - $adhYear)." year";
    $adh = strtotime($adh.$nbYear);

    PS : attention aux espaces, ' +1 year' fonctionnera mais pas ' + 1 year'

  17. #17
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    lol oui c'est bien un date_time , ça n'a rien changé
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  18. #18
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    il n'aime peut-être pas
    $adh = strtotime($adh.$nbYear);

    essaye avec
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // à la place de (dans mon dernier code) :
    // $adh = strtotime($adh.$nbYear);
    $adh = strtotime(date("Y-m-d", strtotime($nbYear)));

  19. #19
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    nan toujours pas, ça doit pas être à cause de la fonction enfin c'est ce que je pense
    ma requête est toute simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM membre ORDER BY adhesion";
    Le no life répond "Counter Strike : Source"
    Le geek répond "Cascading Style Sheets"
    Ce n'est pas un hasard si deux choses vitales ont le même sigle

  20. #20
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Tu pourrais faire des echo() de tes dates d'adhésion stp ? (avant transfo of course ^^)

    On y verra peut-être plus clair

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [WD17] Fonction Saisie avec une date
    Par alex1005 dans le forum WinDev
    Réponses: 5
    Dernier message: 02/10/2012, 14h40
  2. Réponses: 12
    Dernier message: 29/03/2012, 13h47
  3. [Dates] Soustraire un nombre de jour à une date
    Par lesgars dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 14h43
  4. Réponses: 2
    Dernier message: 16/08/2005, 15h33
  5. probléme avec une date/string dans un CommandText
    Par critok dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/02/2005, 15h30

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