Obtenir la date de la veille depuis une date

Obtenir la date de la veille depuis une date - PHP - Programmation

Marsh Posté le 19-07-2010 à 11:55:07    

Bonjour,
 
Voila en fait c'est surement tout bête...
Je récupère une variable $_GET['date'] qui contient par exemple "2010-07-19" et je voudrais la transformer en le jour d'avant (ici 2010-07-18).
 
Savez vous comment faire ?
 
Merci

Reply

Marsh Posté le 19-07-2010 à 11:55:07   

Reply

Marsh Posté le 19-07-2010 à 12:07:44    

Essaye d'utiliser strtotime(), ca fonctionnera sans doute.
Tu récupères un timestamp en secondes.
Tu enlèves 24*3600 = 86400 secondes pour trouver le timestamp de la veille.
Tu converti le tout en date.
 

Code :
  1. $veille = date('Y-m-d',strtotime($date)-86400);


Message édité par Pascal le nain le 19-07-2010 à 12:07:56
Reply

Marsh Posté le 19-07-2010 à 16:30:58    

Alors attention, ça marche pas à tous les coups cette méthode, 2 jours dans l'année, quand on fait le changement d'horaire! Un coup le jour à une heure de plus, un coup, il en a une de moins. J'ai eu un bug de ce genre là dans mon soft Astres (cf ma signature) dans la partie stats, pour générer des périodes (dates) entre 2 dates (une période pouvant être un jour, une semaine, un mois, une année. Des fois, j'avais un décalage et je savais pas pourquoi, d'autant que c'était pas systématique. En cherchant, j'ai vu que c'était parce que mon algo était basé sur 1j = 86400 secondes.
Maintenant, j'utilise un truc du genre :

Code :
  1. $veille = date('Y-m-d', strtotime("1 day ago" ));


 
Y'a pas de surprise et en plus, c'est plu lisible question code ;)


Message édité par rufo le 19-07-2010 à 16:31:13

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 19-07-2010 à 16:39:00    

oui avec les changements d'heures ca fausse tout ;)

Reply

Marsh Posté le 19-07-2010 à 17:23:54    

A quel moment vient l'erreur ?

Reply

Marsh Posté le 19-07-2010 à 17:45:18    

Ben à cause des 2 jours où on change de date. Mettons qu'on soit le jour où on gagne 1h, avec ta méthode de -86400s, la veille va avoir la même date. Dans l'autre cas, on va pas avoir la date de la veille mais de l'avant veille.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 19-07-2010 à 18:11:37    

rufo a écrit :

Ben à cause des 2 jours où on change de date. Mettons qu'on soit le jour où on gagne 1h, avec ta méthode de -86400s, la veille va avoir la même date. Dans l'autre cas, on va pas avoir la date de la veille mais de l'avant veille.

 


je plussoie

 
Code :
  1. echo date('Y-m-d',strtotime('2010-03-29')-86400);
  2. /*
  3. 2010-03-27
  4. au lieu du
  5. 2010-03-28
  6. */


Message édité par stealth35 le 19-07-2010 à 18:12:35
Reply

Marsh Posté le 19-07-2010 à 20:20:10    

La fonction date ne prend pas en charge les heures d'été/hiver ?

Reply

Marsh Posté le 19-07-2010 à 20:41:30    

Pascal le nain a écrit :

La fonction date ne prend pas en charge les heures d'été/hiver ?


C'est pas comme ça qu'il faut raisonner. Le problème, c'est qu'il n'y a pas toujours 24*60*60 ou 86400 secondes dans un jour. Si tu demandes d'ajouter 86400 secondes plutôt que 1 jour, tu arriveras le lendemain à la même heure... ou pas.
 

86400


Éviter ce genre de nombre magique et préférer quelque chose de plus explicite, tel que 24*60*60.
 

Spoiler :

Le premier qui vient dire que ça prend plus de cycles CPU...  [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 19-07-2010 à 22:24:14    

sircam a écrit :

]Le premier qui vient dire que ça prend plus de cycles CPU...  [:pingouino]


 
Mais ouais  [:pampers]

Reply

Marsh Posté le 19-07-2010 à 22:24:14   

Reply

Marsh Posté le 20-07-2010 à 08:13:57    

Merci! Pour le one day ago ça marche et c'est nickel aussi avec "+1 day"

 

Par contre je suis embeté par ce que je ne peux plus calculer depuis une date.

 

Là je fais     $veille = date('Y-m-d',strtotime($date)-86400); ça me donne le jour avant ma date.
Or ça :       $veille = date('Y-m-d', strtotime("1 day ago" )); ça me donne hier


Message édité par vanquishV12 le 20-07-2010 à 08:21:27
Reply

Marsh Posté le 20-07-2010 à 09:44:23    

ben si, tu fais ça :

Code :
  1. $veille = date('Y-m-d', strtotime("1 day ago", strtotime($date)));


Faut lire un peu la doc de temps en temps!


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-07-2010 à 09:59:40    

On peut pas écrire '-1 day' aussi ?


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 20-07-2010 à 10:06:01    

rufo, j'avais lu la doc mais j'avais inversé les deux arguments finaux... Merci.

Reply

Marsh Posté le 20-07-2010 à 10:08:54    

T'es pas obligé de te faire chier avec 2 strtotime :o
 
Tu fais juste :
 

Code :
  1. date('Y-m-d', strtotime('2010-07-19 - 1 day'))


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 20-07-2010 à 10:20:11    

Ah oui, je pensais pas que ça marchait ça (jamais testé non plu cela dit). Merci de l'info.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-07-2010 à 10:27:41    

rufo a écrit :

Faut lire un peu la doc de temps en temps!


 :D  [:lebauf]

Reply

Marsh Posté le 20-07-2010 à 11:50:42    

eh, faut pas déconner, la page m'a l'air bien récente : dernière maj, 09/07/2010 pour http://www.php.net/manual/fr/datetime.formats.php ! Je passe pas ma vie sur www.php.net non plu :/
pareil pour celle là : http://www.php.net/manual/fr/datet [...] mpound.php


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed