Obtenir la date de la veille depuis une date - PHP - Programmation
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 : |
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 : |
Y'a pas de surprise et en plus, c'est plu lisible question code
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.
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 :
|
Marsh Posté le 19-07-2010 à 20:20:10
ReplyMarsh 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... |
Marsh Posté le 19-07-2010 à 22:24:14
ReplyMarsh 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
Marsh Posté le 20-07-2010 à 09:44:23
ben si, tu fais ça :
Code : |
Faut lire un peu la doc de temps en temps!
Marsh Posté le 20-07-2010 à 09:59:40
On peut pas écrire '-1 day' aussi ?
Marsh Posté le 20-07-2010 à 10:06:01
rufo, j'avais lu la doc mais j'avais inversé les deux arguments finaux... Merci.
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.
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
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