come ottenere la data di ieri utilizzando php?


90

Voglio ottenere la data di ieri utilizzando un formato di data specifico in php, questo è il formato:

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

È possibile?

Prendi in considerazione il mese e gli anni se devono essere modificati rispettivamente.


1
data ("dmy", time () - 60 * 60 * 24);
NINCOMPOOP

hai provato la mia soluzione? questo funzionerà anche con i mesi che cambiano
Fabio

il momento perfetto in cui il nome utente "noob" sopra di me aggiunge un buon significato al suo commento :)
STT LCU

Risposte:


262

eccoti

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

questo funzionerà anche se il mese cambia


Un piccolo pignolo: la tua funzione si mette nei guai verso mezzanotte se quel tempo supera il cambio dell'ora legale. Andare esplicitamente a mezzogiorno aiuta lì.
Deduplicator

1
Sbagliato . 3 cose sull'ora legale: 1 dipende dall'ora del server, se il server ha il fuso orario corretto non influirà sulla mia funzione. 2 non tutto il mondo è influenzato dall'ora legale, ci sono luoghi che non la usano. 3 la maggior parte dei luoghi utilizza per cambiare l'orario durante le prime ore della giornata (come le 2 o le 3 del mattino) in modo che non influisca sui cambiamenti del giorno.
Fabio

1
1. Quindi quella funzione sa e tiene conto che un giorno può essere diverso da 24 ore? 2. Anche un orologio rotto va bene due volte al giorno. 3. L'ora esatta che viene rubata / duplicata non è così importante per il calcolo.
Deduplicatore

1
non ha senso 1 al giorno non è altro che 24 fino a quando l'ora legale non cambia l'ora e il server cambia l'ora secondo 2 ovviamente lo è ma non è questo il punto 3 questo è molto importante invece, la tua idea potrebbe essere giusta se l'ora cambia a mezzanotte, non in altre ore
Fabio

7

puoi farlo da

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

o da

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

3
Non garantito con l'ora legale ... le persone dovrebbero davvero usare oggetti DateTime in questi giorni
Mark Baker

Funzionerà bene se operi con l'ora UTC. date_default_timezone_set ('UTC');
Patrick

7

Passo 1

Abbiamo bisogno di impostare i dati del formato nella funzione date (): la funzione date () restituisce una stringa formattata in base alla stringa del formato specificato utilizzando il timestamp intero specificato o l'ora corrente se non viene fornito alcun timestamp. In altre parole, timestamp è opzionale e il valore predefinito è time ().

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

risultato: 30 marzo 2010

Passo 2

Per la data "ieri" usa la funzione php mktime (): La funzione mktime () restituisce il timestamp Unix corrispondente agli argomenti forniti. Questo timestamp è un numero intero lungo contenente il numero di secondi tra l'epoca Unix (1 gennaio 1970 00:00:00 GMT) e l'ora specificata. Gli argomenti possono essere omessi in ordine da destra a sinistra; qualsiasi argomento così omesso verrà impostato al valore corrente in base alla data e all'ora.

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

risultato: 1269820800

Passaggio 3

Ora unisci tutto e guarda questo:

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

risultato: 29 marzo 2010

Operando in modo simile, è possibile ricevere l'ora indietro.

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

risultato: 20:00:00

o 7 giorni fa:

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

risultato: 2010-03-23




3

Se definisci il fuso orario nella tua app PHP (come dovresti), puoi farlo in questo modo:

date_default_timezone_set('Europe/Paris');

Quindi è semplice come:

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

(Potresti voler definire una costante o una variabile di ambiente per memorizzare il fuso orario predefinito.)


2

prova questo

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

3
A causa dell'ora legale, un giorno non ha sempre 86400 secondi! Quindi questo calcolo potrebbe essere sbagliato due volte l'anno!
sbrbot

... ea causa dei secondi intercalari.
Sebastian Mach

1

Un altro metodo OOP per DateTime con l'impostazione dell'ora esatta:

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

0

Puoi farlo anche usando la libreria Carbon :

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

In altri formati:

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'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.