2010-05-14 16 views

risposta

5

Check strtotime -funzione per convertire il vostro data/ora per un timestamp PHP: http://php.net/manual/en/function.strtotime.php

Se strtotime non può gestire il tuo formato data/ora correttamente ("4:00" probabilmente funzionerà ma non "a 4PM "), è necessario utilizzare le funzioni stringa, ad es substr per analizzare/correggere il formato e recuperare il timestamp tramite un'altra funzione, ad es. mktime.

Quindi confrontare 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 PHP-doc sulle funzioni data/ora e tornare qui con alcuni dei tuoi codice sorgente una volta che ti blocchi.

+0

vedere di Ivar Koster risposta –

176

Dal PHP> = 5.2.0 è possibile utilizzare la classe DateTime in quanto tale:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) { 
    # current time is greater than 2010-05-15 16:00:00 and thus in the past 
} 

La stringa passata al DateTime constructor viene analizzato according to these rules.


Si noti che è anche possibile utilizzare time e strtotime funzioni. See original answer.

+4

timestamp ha alcune limitazioni di mate e alcuni bug troppo, per esempio un timestamp non può gestire una data prima del 1970 e dopo il 2038 (vedi la risposta di Ivar Koster) –

+0

risposta stupenda! :) –

+0

Spesso vediamo un abuso del nuovo DateTime() senza parametro, se si utilizzano date UTC (come si dovrebbe), preferiamo usare il nuovo DateTime ("now", new DateTimeZone ('UTC')). Ciò impedirà alla tua app di avere errori di valutazione in date incomprensibili. ti consiglio di memorizzarlo in una variabile statica di funzione, in una classe statica o da qualche altra parte nel tuo processo in esecuzione ... – Loenix

75

C'è anche la classe DateTime che implementa una funzione per 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'; 
} 
+0

Cosa fa la funzione per questo? –

6

L'intervallo di date dateTime va da circa 292 miliardi di anni nel passato a quello del futuro. La funzione timestamp ha un limite (inizia dal 1970 al 2038 se ricordo bene).

1

Ho avuto un problema con questa data a confronto e hanno bisogno di un po 'di regolare

function getDatetimeNow() { 
    $tz_object = new DateTimeZone('Europe/Belgrade'); 
    $datetime = new DateTime(); 
    $datetime->setTimezone($tz_object); 
    return $datetime->format('Y\-m\-d\ h:i:s'); 
} 

$currentDate = getDatetimeNow(); 

$dtA = new DateTime($currentDate); 
$dtB = new DateTime($date); 

if ($dtA > $dtB) { 
    $active = 0; 
    return $active; 
} 
else { 
    $active = 1; 
    return $active; 
} 
Problemi correlati