2011-01-22 13 views
10

ho provatoCome posso ottenere timestamp di oggi in PHP

$dtToday = DateTime::createFromFormat('Y-m-d', date('Y-m-d')); 

ma quando ho emetterlo

die($dtToday->format('d M Y g:i:s a')); 

ho ancora il tempo ad esempio, "22 gennaio 2011 04:53:59". Perché?

UPDATE

Ah ... molte persone mi frainteso, il mio male, ho dimenticato di sottolineare il punto principale. Ho creato la data con solo la parte della data, non voglio il tempo. Quindi mi aspetto qualcosa di simile

22 Jan 2011 12:00:00 am 
+0

hai chiesto che la data essere restituito come 'd MY g: i: sa' quindi cosa c'è di sbagliato con l'output? –

+0

@Salman A, ho creato la data con ora, quindi mi aspetto che il tempo sia 12:00:00? –

+0

OK, ho inviato una risposta –

risposta

11

OK, ammetto che non ho familiarità con la classe DateTime. Ma sono sicuro che fornisce metodi come setHour, setMinute etc che è possibile utilizzare per azzerare la porzione temporale. Personalmente, mi piacerebbe creare la data con la funzione mktime():

echo date("Y-m-d H:i:s", // this line is for demonstration 
    mktime(0, 0, 0)  // this generates a timestamp which can be used in most date functions 
          // first three parameters are hour, minute, second which I set to 0 
          // remaining parameters are optional 
          // infact all parameters are optional and all parameters default to corresponding portion of the *current* date/time 
); 
5

È possibile farlo facendo passare la corrente timestamp Unix come secondo parametro alla funzione di data

echo date("Y-m-d H:i:s",time()); 
+4

il secondo parametro fino alla data() ha come valore predefinito time(), quindi la data ('Y-m-d') è sufficiente. – gregjor

+0

in realtà non è il formato, vedere il mio aggiornamento. Fondamentalmente sto chiedendo perché dopo aver creato il DateTime con solo la data meno la parte del tempo, perché ho ancora tempo? Voglio la data senza la porzione di tempo –

0

E 'UTC, o qualcosa del genere?

Ho una versione PHP che mi dà un errore ogni volta che faccio qualcosa relativo date correlati senza prima usare date_default_timezone_set. Forse questo ti aiuterà.

0

Rimuovi questa parte g:i:s a dal tuo codice.

Ora, se si desidera una bella data formattata in base al proprio locale, si consiglia di utilizzare la funzione strftime().

+0

Spiacente, intendo perché dopo aver creato il DateTime senza la parte relativa al tempo, perché continuo a ottenere il tempo? –

1

hai trovato "22 Gen 2011 16:53:59", perché queste sono le regole si formatta il tuo appuntamento con:
d (giorno): 22
M (mese): Jan
Y (Anno): 2011 formato
g (12 ore): 4
i (in minuti): 53
s (secondi): 59
un (aM/PM): pm
essere più speciffic sul formato faresti come il tuo timestamp da avere. Ti suggerisco di dare un picco alla documentazione php date.

+0

Mi spiace, intendo perché dopo aver creato il DateTime senza la parte relativa al tempo, perché continuo a ottenere il tempo? –

12

vedere la documentazione per DateTime::createFromFormat:

Se formato non contiene il carattere! quindi le porzioni del tempo generato che non sono specificate nel formato verranno impostate sull'ora di sistema corrente.

Se fate la seguente chiamata di funzione, si otterrà il risultato che si aspettano:

$dtToday = DateTime::createFromFormat('!Y-m-d', date('Y-m-d')); 
5

timestamp inizio di oggi

$today_start_ts = strtotime(date('Y-m-d', time()). '00:00:00'); 
+0

dovrebbe essere '00:00:00' Non dimenticare lo spazio. – modu

+0

Questa dovrebbe essere la risposta accettata. –

Problemi correlati