Come posso verificare se la data / ora corrente è oltre una data / ora impostata?


115

Sto cercando di scrivere uno script che controllerà se la data / ora corrente è oltre il 05/15/2010 at 4PM

Come posso utilizzare la funzione date () di PHP per eseguire questo controllo?

Risposte:


228

Poiché PHP> = 5.2.2 puoi usare la DateTimeclasse come tale:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
    # current time is greater than 2010-05-15 16:00:00
    # in other words, 2010-05-15 16:00:00 has passed
}

La stringa passata al costruttore DateTime viene analizzata in base a queste regole .


Notare che è anche possibile utilizzare timee strtotimefunctions. Vedi risposta originale .


6
timestamp ha alcune limitazioni amico e anche alcuni bug, ad esempio un timestamp non può gestire una data prima del 1970 e dopo il 2038 (vedi la risposta di Ivar Koster)
Steel Brain

1
Spesso vediamo un abuso del nuovo DateTime () senza parametri, se stai usando le date UTC (come dovresti), preferisci usare new DateTime ("now", new DateTimeZone ('UTC')). Ciò eviterà che la tua app crei bug incomprensibili nelle date. ti consiglio di memorizzarlo in una variabile statica di funzione, una classe statica o da qualche altra parte nel tuo processo in esecuzione ...
Loenix

Cosa succede se abbiamo già un oggetto DateTime e vogliamo sapere se è passato perché non possiamo passare un oggetto al costruttore DateTime come suggerito? dovremmo usare il suo getTimestamp () e confrontarlo con time ()? @Salman A
user4271704

@ user4271704 new DateTime('2010-05-15')È solo un esempio, potrebbe essere qualsiasi oggetto DateTime inizializzato in precedenza.
Salman A

supponendo che $objectsia un oggetto DateTime, l'ho usato if (new DateTime() > $object) {}e funziona in modo errato. Ma if (time() > $bject->getTimeStamp()) {}funziona correttamente. @Salman A
user4271704

77

C'è anche la classe DateTime che implementa una funzione per gli operatori di confronto.

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}

1
Quale funzione implementa per questo?
still_dreaming_1

6

Controlla la funzione di PHP strtotimeper convertire la data / ora impostata in un timestamp: http://php.net/manual/en/function.strtotime.php

Se strtotimenon riesci a gestire correttamente il tuo formato di data / ora ("4:00 PM" probabilmente funzionerà ma non "alle 16:00"), dovrai usare le funzioni stringa, ad esempio substrper analizzare / correggere il tuo formato e recuperare il tuo timestamp tramite un'altra funzione, ad esmktime .

Quindi confronta il timestamp risultante con la data / ora corrente (if ($calulated_timestamp > time()) { /* date in the future */ } ) per vedere se la data / ora impostata è nel passato o nel futuro.

Suggerisco di leggere il documento PHP sulle funzioni data / ora e tornare qui con un po 'del tuo codice sorgente una volta che ti blocchi.


vedi la risposta di Ivar Koster
Steel Brain

1
date_default_timezone_set('Asia/Kolkata');

$curDateTime = date("Y-m-d H:i:s");
$myDate = date("Y-m-d H:i:s", strtotime("2018-06-26 16:15:33"));
if($myDate < $curDateTime){
    echo "active";exit;
}else{
    echo "inactive";exit;
}

Sicuramente questo non funzionerà come $myDatesarà uguale a string (0) "".
Nikola Petkanski
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.