2012-07-13 10 views
10

Utilizzo di PHP come si ottiene il numero di secondi trascorsi dalla mezzanotte del giorno corrente?Come trascorrere secondi dalla mezzanotte

tutto quello che ho provato in questo momento è:

$hour=substr(date("h:i:s"),0,2); 
$minute=substr(date("h:i:s"),3,2); 
echo $hour."\r\n"; 
echo $minute."\r\n"; 

... ma non restituisce l'ora del server corretto della risposta e non so come fare.

+3

Dove vuoi arrivare bloccato su questo? Che cosa hai provato? – azhrei

+0

Tutto quello che ho provato adesso è $ hour = substr (date ("h: i: s"), 0,2); $ minute = substr (date ("h: i: s"), 3,2); echo $ hour. "\ R \ n"; echo $ minute. "\ R \ n"; ma non restituisce il tempo corretto del server della risposta e non so come farlo. Sto usando una richiesta GET altrove e sto cercando di ottenere il mio script php per restituire il numero di secondi trascorsi dalla mezzanotte del giorno corrente – Nubcake

+0

Guarda qui: http://stackoverflow.com/a/479147 –

risposta

24

Questo dovrebbe funzionare.

echo time() - strtotime("today"); 

Questo mostrerà solo il fuso orario dei server.

2

Basato sul tuo commento, se si ricevono il tempo come una stringa e si vuole calcolare il numero di secondi da quel momento:

$time = strtotime($_GET['time']); // Do some verification before this step 
$midnight = strtotime("00:00"); // Midnight measured in seconds since Unix Epoch 
$sinceMidnight = $time - $midnight; // Seconds since midnight 

ci si va. Leggere nella funzione time() di PHP e strtotime().

+0

Come funzionerebbe con un tempo da una risposta come 01:28:49? Sostituire 00:00 con l'ora del server? – Nubcake

+0

No. 00:00 è mezzanotte, quindi si sottrae l'ora corrente per ottenere il tempo da mezzanotte in secondi. È questa la tua domanda? – Tushar

+0

Lasciatemi provare a spiegare più semplicemente scusa, sto usando una richiesta GET e in quella risposta dal server riceverai la sezione Date: quindi di 'se l'ora (da quella sezione) è 01:35:33, come calcoli il numero di secondi trascorsi da mezzanotte da quel momento, ho dimenticato di aggiungerlo nell'OP. – Nubcake

1
echo time() - strtotime('today'); 
12

Simplest ritengo sarebbe dividendo il tempo corrente (in secondi) per il numero di secondi in un giorno (60 * 60 * 24) e prendendo il resto:

(time() % 86400) 
+2

Bello, ma conta secondi dalla mezzanotte * UTC *, non ora locale – aross

+1

Vero che utilizza l'epoca di Linux in GMT/UTC - Suppongo che non sia mai stato un problema per me, dal momento che uso UTC per ogni cosa comunque. – Wranorn

+2

"Sarò a casa intorno a mezzanotte tesoro" * chiacchiere ad alta voce dall'altra parte *, "No tesoro, intendevo mezzanotte * UTC *!" ;) – aross

2
echo (date('G') * 3600 + date('i') * 60); 

Moltiplicare l'ora corrente per il numero di secondi in ogni ora e aggiungerla al numero di minuti moltiplicato per il numero di secondi in ciascun minuto.

+0

Ma questo lo arrotonda al minuto più vicino. –

1

Penso che vogliate ottenere il tempo dall'inizio della giornata alle ore correnti e ai secondi della giornata, questo può essere fatto in questo modo, sarà comunque necessario impostare il fuso orario al posto di "Asia/Karachi". Questo ottiene il tempo corretto dalla mezzanotte nel fuso orario dell'utente invece del fuso orario del server.

Qui sta collegamento di funzionamento: http://codepad.viper-7.com/ykJC2R

//Get current time timestamp 
$time_now = time(); 

//Create DateTime class object 
$date = new DateTime(); 

//Set timestamp to DateTime object 
$date->setTimestamp($time_now); 

//Set timezone so that code don't get server's timezone midnight time 
$date->setTimezone(new DateTimeZone('Asia/Karachi')); 

//Print current time in user's timezone 
echo $date->format('Y-m-d H:i') . "<br />"; 

//Get time stamp for midnight tonight 
$date->modify('today midnight'); 
$midnight_time = $date->getTimestamp(); 

//Print midnight time in user's timezone 
echo $date->format('Y-m-d H:i') . "<br />"; 

    //Now you will need to subtract midnight time from current time in user's timezone 
$seconds_since_midnight = $time_now - $midnight_time; 

//Print seconds since midnight in your timezone 
echo $seconds_since_midnight; 
1

La soluzione più breve sarebbe probabilmente questo:

$time = "12:34:56"; 
echo strtotime("{$time}UTC", 0); 

Il motivo per cui funziona è che strtotime usa il secondo parametro per determinare la data parte della stringa del tempo. In questo caso, sto usando 0, il che significa che i risultati della stringa completa in 1970-01-01 12:34:56 UTC. strtotime restituisce quindi il timestamp UNIX (il numero di secondi trascorsi dal 1970-01-01 00:00:00 UTC). Nota: il primo parametro ha UTC aggiunto per impedire che l'ora venga interpretata come locale.

1

Se si utilizza DateTime:

$timeDiff = $time->diff(new \DateTime("today")); 
$timeDiffSec = $timeDiff->h* 3600 + $timeDiff->i*60 + $timeDiff->s; 
0

in carbonio, il numero di secondi trascorsi dalla mezzanotte si possono trovare in questo modo:

$seconds_since_midnight = $dt->secondsSinceMidnight();

E anche se non ci sono minuti da mezzanotte suppongo che fate:

$minutes_since_midnight = (int) floor($dt->secondsSinceMidnight()/60);

Problemi correlati