comment obtenir la date d'hier en utilisant php?


90

Je veux obtenir la date d'hier en utilisant un format de date spécifique en php, c'est le format:

$today = date("d.m.Y"); //15.04.2013

C'est possible?

Tenez compte du mois et des années s'ils doivent être modifiés respectivement.


1
date ("dmy", heure () - 60 * 60 * 24);
NINCOMPOOP

avez-vous essayé ma solution? cela fonctionnera également avec les mois changeants
Fabio

le moment parfait où le pseudo "noob" au dessus de moi ajoute une bonne signification à son commentaire :)
STT LCU

Réponses:


262

Voilà

date('d.m.Y',strtotime("-1 days"));

cela fonctionnera également si le mois change


Un petit choix: votre fonction rencontre des problèmes vers minuit si cette heure couvre le changement d'heure d'été. Aller explicitement à midi y contribue.
Deduplicator

1
C'est faux . 3 choses à propos de l'heure d'été: 1 cela dépend de l'heure du serveur, si le serveur a un fuseau horaire correct, cela n'affectera pas ma fonction. 2 pas le monde entier est affecté par DST, il y a des endroits qui ne l'utilisent pas. 3 la plupart des endroits utilisent pour changer l'heure pendant les premières heures de la journée (comme 2 ou 3 heures du matin) afin que cela n'affecte pas un jour changeant.
Fabio

1
1. Donc, cette fonction sait et tient compte du fait qu'un jour peut être autre que 24h? 2. Même une horloge cassée a raison deux fois par jour. 3. L'heure exacte volée / dupliquée n'est pas si importante pour le calcul.
Deduplicator

1
aucun sens 1 par jour n'est autre que 24 jusqu'à ce que l'heure d'été change l'heure et le serveur change l'heure en fonction de 2 bien sûr, mais ce n'est pas le point 3 c'est très important à la place, votre idée pourrait être juste si l'heure change à minuit, pas dans d'autres heures
Fabio

7

vous pouvez le faire en

date("F j, Y", time() - 60 * 60 * 24);

ou par

date("F j, Y", strtotime("yesterday"));

3
Non garanti avec l'heure d'été ... les gens devraient vraiment utiliser des objets DateTime ces jours-ci
Mark Baker

Fonctionnera bien si vous travaillez à l'heure UTC. date_default_timezone_set ('UTC');
Patrick

7

Étape 1

Nous avons besoin de données de format défini dans la fonction date (): La fonction date () renvoie une chaîne formatée selon la chaîne de format donnée en utilisant l'horodatage entier donné ou l'heure actuelle si aucun horodatage n'est donné. En d'autres termes, l'horodatage est facultatif et prend la valeur par défaut de time ().

<?php
echo date("F j, Y");
?>

résultat: 30 mars 2010

Étape 2

Pour la date "hier", utilisez la fonction php mktime (): La fonction mktime () renvoie l'horodatage Unix correspondant aux arguments donnés. Cet horodatage est un long entier contenant le nombre de secondes entre l'époque Unix (1er janvier 1970 00:00:00 GMT) et l'heure spécifiée. Les arguments peuvent être laissés de côté dans l'ordre de droite à gauche; tout argument ainsi omis sera mis à la valeur actuelle en fonction de la date et de l'heure locales.

<?php
echo mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
?>

résultat: 1269820800

Étape 3

Maintenant, fusionnez tout et regardez ceci:

<?php
$yesterday = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")-1,date("Y")));
echo $yesterday;
?>

résultat: 29 mars 2010

Fonctionnant de manière similaire, il est possible de recevoir l'heure en retour.

<?php
$yesterday = date("H:i:s",mktime(date("H"), 0, 0, date("m"),date("d"), date("Y")));
echo $yesterday;
?>

résultat: 20:00:00

ou il y a 7 jours:

<?php
$week = date("Y-m-d",mktime(0, 0, 0, date("m"), date("d")-7,date("Y")));
echo $week;
?>

résultat: 23/03/2010


7

essaye ça

        $tz    = new DateTimeZone('Your Time Zone');
        $date  = new DateTime($today,$tz);
        $interval = new DateInterval('P1D');
        $date->sub($interval); 

        echo $date->format('d.m.y');

        ?>           

voir ce php.net/manual/en/book.datetime.php '.. Cela fonctionnera aussi avec le changement de mois
alwaysLearn

9
nouveau DateTime ('hier')
Virgili Garcia

$ hier = new DateTime ('hier', new DateTimeZone ('Votre fuseau horaire'));
miralong

Un peu d'explication avec cette réponse de code uniquement serait bien.
mickmackusa du


3

Si vous définissez le fuseau horaire dans votre application PHP (comme vous devriez), vous pouvez le faire de cette façon:

date_default_timezone_set('Europe/Paris');

Ensuite, c'est aussi simple que:

$yesterday = new DateTime('yesterday'); // will use our default timezone, Paris
echo $yesterday->format('Y-m-d'); // or whatever format you want

(Vous pouvez définir une constante ou une variable d'environnement pour stocker votre fuseau horaire par défaut.)


2

essaye ça

<?php
$yesterday = date(“d.m.Y”, time()-86400);
echo $yesterday;

3
En raison de l'heure d'été, un jour n'a pas toujours 86400 secondes! Donc ce calcul pourrait être faux deux fois par an!
sbrbot

... et en raison des secondes intercalaires.
Sebastian Mach

1

Une autre méthode POO pour DateTime avec la définition de l'heure exacte:

$yesterday = new DateTime("yesterday 09:00:59", new DateTimeZone('Europe/London'));
echo $yesterday->format('Y-m-d H:i:s') . "\n";

0

Vous pouvez également le faire en utilisant la bibliothèque Carbon :

Carbon::yesterday()->format('d.m.Y');         // '26.03.2019'

Dans d'autres formats:

Carbon::yesterday()->toDateString();          // '2019-03-26'
Carbon::yesterday()->toDateTimeString();      // '2019-03-26 00:00:00'

Carbon::yesterday()->toFormattedDateString(); // 'Mar 26, 2019'
Carbon::yesterday()->toDayDateTimeString();   // 'Tue, Mar 26, 2019 12:00 AM'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.