Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2974 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Php] Fonction qui retourne une date X jours avant la date courante

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Php] Fonction qui retourne une date X jours avant la date courante

n°314100
Notsukaw
Be Aware
Posté le 20-02-2003 à 15:50:00  profilanswer
 

Bonjour les gens,
 
voilà j'ai eu besoin d'obtenir une date D, X jours avant la date courante.
J'ai été surpris de voir qu'il n'y avait pas de fonction déjà toute faite à ce sujet, donc je me suis codé la mienne.
 
Je me suis dit que ça pourrait peut être servir un jour à quelqu'un, donc voici le code :
 

Code :
  1. <?
  2.       /*-------------------------------------------------------------------*/
  3.       /*----- Fonction qui calcule une date antérieure au jour actuel -----*/
  4. /*---------- en fonction du nombre de jours qui les sépare ----------*/
  5.       /*-------------------------------------------------------------------*/
  6. function calcul_date($indice){
  7.  if($indice < 29){
  8.  //Uniquement parce que pas le temps de gérer le cas où on doit reculer de plusieurs mois
  9.   $annee = date("Y" );
  10.   $mois = date("m" );
  11.   $jour_courant = date("d" );
  12.   if(($jour_courant-$indice) > 0){
  13.    /* On reste dans le mois en cours */
  14.    /*--------------------------------*/
  15.    $jour_courant = $jour_courant-$indice;
  16.    $date = $jour_courant." / ".$mois." / ".$annee;
  17.    return $date;
  18.   }else{
  19.    /* On doit "reculer" d'un mois */
  20.    /*-----------------------------*/
  21.    if(($mois-1) > 0){
  22.     /* On ne change pas d'année */
  23.     /*--------------------------*/
  24.     $mois--;
  25.     switch($mois){
  26.      case 1:
  27.       /* On est en janvier */
  28.       /*-------------------*/
  29.       $jour_courant = 31-($indice-$jour_courant);
  30.       $date = $jour_courant." / ".$mois." / ".$annee;
  31.       return $date;
  32.      case 2:
  33.       /* On est en février */
  34.       /*-------------------*/
  35.       if(($annee % 4) == 0){
  36.        //année bissextile
  37.        $jour_courant = 29-($indice-$jour_courant);
  38.       }else{
  39.        //année normale
  40.        $jour_courant = 28-($indice-$jour_courant);
  41.       }
  42.       $date = $jour_courant." / ".$mois." / ".$annee;
  43.       return $date;
  44.      case 3:
  45.       /* On est en mars */
  46.       /*----------------*/
  47.       $jour_courant = 31-($indice-$jour_courant);
  48.       $date = $jour_courant." / ".$mois." / ".$annee;
  49.       return $date;
  50.      case 4:
  51.       /* On est en avril */
  52.       /*-----------------*/
  53.       $jour_courant = 30-($indice-$jour_courant);
  54.       $date = $jour_courant." / ".$mois." / ".$annee;
  55.       return $date;
  56.      case 5:
  57.       /* On est en mai */
  58.       /*---------------*/
  59.       $jour_courant = 31-($indice-$jour_courant);
  60.       $date = $jour_courant." / ".$mois." / ".$annee;
  61.       return $date;
  62.      case 6:
  63.       /* On est en juin */
  64.       /*----------------*/
  65.       $jour_courant = 30-($indice-$jour_courant);
  66.       $date = $jour_courant." / ".$mois." / ".$annee;
  67.       return $date;
  68.      case 7:
  69.       /* On est en juillet */
  70.       /*-------------------*/
  71.       $jour_courant = 31-($indice-$jour_courant);
  72.       $date = $jour_courant." / ".$mois." / ".$annee;
  73.       return $date;
  74.      case 8:
  75.       /* On est en août */
  76.       /*----------------*/
  77.       $jour_courant = 31-($indice-$jour_courant);
  78.       $date = $jour_courant." / ".$mois." / ".$annee;
  79.       return $date;
  80.      case 9:
  81.       /* On est en septembre */
  82.       /*---------------------*/
  83.       $jour_courant = 30-($indice-$jour_courant);
  84.       $date = $jour_courant." / ".$mois." / ".$annee;
  85.       return $date;
  86.      case 10:
  87.       /* On est en octobre */
  88.       /*-------------------*/
  89.       $jour_courant = 31-($indice-$jour_courant);
  90.       $date = $jour_courant." / ".$mois." / ".$annee;
  91.       return $date;
  92.      case 11:
  93.       /* On est en novembre */
  94.       /*--------------------*/
  95.       $jour_courant = 30-($indice-$jour_courant);
  96.       $date = $jour_courant." / ".$mois." / ".$annee;
  97.       return $date;
  98.     }
  99.    }else{
  100.     /* On recule d'un an */
  101.     /*-------------------*/
  102.     $annee--;
  103.     $mois=12;
  104.     $jour_courant=31-($indice-$jour_courant);
  105.     $date = $jour_courant." / ".$mois." / ".$annee;
  106.     return $date;
  107.    }
  108.   }
  109.     }else{
  110.  return -1;
  111.     }
  112. }
  113.       /*-------------------------------------------------------------------*/
  114.       /*-------------------------------------------------------------------*/
  115.       /*-------------------------------------------------------------------*/
  116. ?>


 
Comme vous le voyez, j'ai simplifier la chose en me limitant dans le nombre de jours d'écarts possible, parce qu'après c'est plus subtile au niveau des changements de mois et tout ça.
 
Si j'avais vous avez des avis pour améliorer, vous êtes les bienvenus.
 
:hello:


---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro)  [Galerie perso]
mood
Publicité
Posté le 20-02-2003 à 15:50:00  profilanswer
 

n°314103
beleg
黑社會
Posté le 20-02-2003 à 15:51:35  profilanswer
 

meme semble bien quil y a une fontion ...  :heink:
 
edit :  
premierement ... avant que je trouve mieux.
- T = prendre le time stamp courant
- T = T - NBJOUR*24*60*60 (24 heures en secondes)
- date = date(format, T)
 
exemple -30 jours :  

Code :
  1. $T = time();
  2. echo date("Y - m - d",$T)."<br>";
  3. $T = $T - (30*24*3600);   
  4. echo date("Y - m - d",$T)."<br>";


 


2003 - 02 - 20
2003 - 01 - 21


 
c correct ou pas ?


Message édité par beleg le 20-02-2003 à 15:57:18
n°314109
kadreg
profil: Utilisateur
Posté le 20-02-2003 à 15:55:25  profilanswer
 

beleg a écrit :

meme semble bien quil y a une fontion ...  :heink:  


 
Non, mais c'est plus simple de faire
 
$dateAvant = time () - (X*24*60*60);


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°314114
beleg
黑社會
Posté le 20-02-2003 à 16:00:07  profilanswer
 

on va se prendre un pot pr notre optimisation de folie ...
 
non sans rire .. on avait fait un truc ici, mais pr le retrouver ... on avait donner une date .. enfin je regarde pdt 2 minutes, si je trouve tant mieux, sinon, tant pis.

n°314118
Notsukaw
Be Aware
Posté le 20-02-2003 à 16:01:41  profilanswer
 

:cry:  J'me suis fait chier pour rien  :pt1cable:  
 
Chui vraiment con des fois  :pfff:


---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro)  [Galerie perso]
n°314120
beleg
黑社會
Posté le 20-02-2003 à 16:04:19  profilanswer
 

jai :
 
$T = mktime ( 0,0,0,02,20-30,2003);
 
heure,minute,secondes,mois,jour - X,annee ...
 
et il renvoie un timestamp correct ...

n°314121
Hermes le ​Messager
Breton Quiétiste
Posté le 20-02-2003 à 16:04:39  profilanswer
 

Pas du tout.  :non:  
 
Tu as du réfléchir à ce problème particulier, et tu l'as résolu à ta manière. Ce faisant, tu as fais des progrès. ;)

n°314129
Notsukaw
Be Aware
Posté le 20-02-2003 à 16:15:34  profilanswer
 

Hermes le Messager a écrit :

Pas du tout.  :non:  
 
Tu as du réfléchir à ce problème particulier, et tu l'as résolu à ta manière. Ce faisant, tu as fais des progrès. ;)
 


 
:jap: certes tu as raison
En tout cas merci les gars !!
:hello:


---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro)  [Galerie perso]
n°315287
belgique
Posté le 21-02-2003 à 21:32:17  profilanswer
 

N'empêche ça doit fouttre la haine  :lol:


---------------
Belgian connection
n°315302
kadreg
profil: Utilisateur
Posté le 21-02-2003 à 21:48:34  profilanswer
 

Belgique a écrit :

N'empêche ça doit fouttre la haine  :lol:  


 
bof, ça arrive...


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le 21-02-2003 à 21:48:34  profilanswer
 

n°315308
Willyzekid
Posté le 21-02-2003 à 22:00:21  profilanswer
 

Ahhh parlons de date...J'ai un prb tout con, de base.
 
J'ai une date stocké dans un TIMESTAMP de MySQL et j'aimerais le convertir en 21-02-2003 suivi de 21:42..
 
Enfin un truc classique quoi (j'imagine)...Sauf que là je suis un train de me prendre là tête comme un boeuf entre UNIX_TIMESTAMP, date et google qui n'a pas de solution directe!
 
Ah, je précise, PHP et SQL, c'est pas mon domaine!
 
Edit: au passage, j'ai bien une solution avec
$dd=substr($myrow[1], 6,2);
$mm=substr($myrow[1],4,2);
$yy=substr($myrow[1],2,2);
$fulldate=$dd."-".$mm."-".$yy;
 
Mais bon, y a rien de direct avec date() et companie?


Message édité par Willyzekid le 21-02-2003 à 22:03:35

---------------
Horizon pas Net, reste à la buvette!!
n°315328
Core 666
Posté le 21-02-2003 à 22:31:58  profilanswer
 

Willyzekid a écrit :

J'ai une date stocké dans un TIMESTAMP de MySQL et j'aimerais le convertir en 21-02-2003 suivi de 21:42..
 
Enfin un truc classique quoi (j'imagine)...Sauf que là je suis un train de me prendre là tête comme un boeuf entre UNIX_TIMESTAMP, date et google qui n'a pas de solution directe!
 
[...]
 
y a rien de direct avec date() et companie?


Si si, date() fait ca très bien :)
 

date("d-m-Y H:i", $row['ta_date_depuis_mysql_en_timestamp'])


Message édité par Core 666 le 21-02-2003 à 22:32:26
n°315340
Willyzekid
Posté le 21-02-2003 à 22:57:28  profilanswer
 

Core 666 a écrit :


Si si, date() fait ca très bien :)
 

date("d-m-Y H:i", $row['ta_date_depuis_mysql_en_timestamp'])




 
Non non parce qu'en fait le Timestamp de MySQL n'est pas du même type que le Timestamp qu'attendant PHP...D'où problème et résultat incohérent.
J'ai trouvé cette solution:
 


//Time conversion
$result=mysql_query('SELECT UNIX_TIMESTAMP($myrow[1]) as epoch_time FROM NewsTab');
$unix_timestamp = mysql_result ($result, 0, 0);
date("d-m-Y", $unix_timestamp)


 
Mais putain 3 lignes pour cette connerie?? :ouch:
 
D'où la question: que vaut-il mieux faire?
- Dans la base, stocker la date dans un format lisible directement (plus rapide, etc.)
- Avoir ces 3 lignes à chaque fois?


---------------
Horizon pas Net, reste à la buvette!!
n°315355
Willyzekid
Posté le 21-02-2003 à 23:13:52  profilanswer
 

Non ben d'ailleurs, c'est encore plus simple que ça...Ca ne marche pas !!!
Ahhrrrrgg, j'aime MySQL, j'aime PHP...


---------------
Horizon pas Net, reste à la buvette!!
n°315432
beleg
黑社會
Posté le 22-02-2003 à 10:40:24  profilanswer
 

si tetais sympa, tu aurais mis un lien direct vers le timestamp mysql.
 
Cela dit, je stocke soit sous la forme yyyymmddhhmmss soit timestamp php.
 
http://www.mysql.com/doc/en/DATETIME.html
Column type   Display format  
TIMESTAMP(14) YYYYMMDDHHMMSS  
TIMESTAMP(12) YYMMDDHHMMSS  
TIMESTAMP(10) YYMMDDHHMM  
TIMESTAMP(8)  YYYYMMDD  
TIMESTAMP(6)  YYMMDD  
TIMESTAMP(4)  YYMM  
TIMESTAMP(2)  YY  
 
 

UNIX_TIMESTAMP(date)

If called with no argument, returns a Unix timestamp (seconds since '1970-01-01 00:00:00' GMT) as an unsigned integer. If UNIX_TIMESTAMP() is called with a date argument, it returns the value of the argument as seconds since '1970-01-01 00:00:00' GMT. date may be a DATE string, a DATETIME string, a TIMESTAMP, or a number in the format YYMMDD or YYYYMMDD in local time.
 
mais vu que tu stockes au format YYYYMMDDHHMMSS  ou approchant
 

Code :
  1. $ret = substr($date, 6, 2)."-";
  2. $ret .= substr($date, 4, 2);
  3. $ret .=  "-".substr($date, 0, 4); 
  4. return $ret;


Message édité par beleg le 22-02-2003 à 10:57:54
n°315627
Willyzekid
Posté le 22-02-2003 à 20:03:48  profilanswer
 

Heu en fait, j'ai fait une DATE_FORMAT() autrement plus simple mais que j'arrivais pas à mettre en place!
Cela dit, merci beaucoup...j'étais un gros état de dépression hier :)


---------------
Horizon pas Net, reste à la buvette!!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Php] Fonction qui retourne une date X jours avant la date courante

 

Sujets relatifs
Recherche d'un fonction semblable à eregi_replace()[PHP : Noob à la lutte!] Comment écrire ceci différemment ?
[PHP]Pour un remplacement bbcode <> html[Résolu][Php] Problème explorateur de fichiers (lecteur réseau)
Construire un DATETIME a partir d'une date et d'une heure[Php/Apache] Cryptage MD5 différent ??
[PHP] faire une requete sur une "plage d'ip"...Pb lors de la transformation XSL d'un document XML via PHP
PDF et PHP[Résolu][Php/Oracle] Problème de caractères bizarres après extraction
Plus de sujets relatifs à : [Php] Fonction qui retourne une date X jours avant la date courante


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR