$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
Come posso convertire il sopra $interval
di secondi in phpConverti DateInterval opporsi al secondo in php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
Come posso convertire il sopra $interval
di secondi in phpConverti DateInterval opporsi al secondo in php
C'è una funzione format
per questo. Ma non restituirà il numero di secondi. Per ottenere il numero di secondi si utilizza questa tecnica
$seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());
Se davvero si vuole utilizzare $interval
è necessario per calcolarlo.
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
Qui
86400
è il numero di secondi in un giorno3600
è il numero di secondi in un'ora60
è il numero di secondi in un minutoUn altro modo per ottenere il numero di secondi in un intervallo i s per aggiungerlo alla data zero e ottenere il timestamp di quella data:
$seconds = date_create('@0')->add($interval)->getTimestamp();
Questo metodo consente di gestire intervalli creati tramite il contructor DateInterval più o meno correttamente, mentre shiplu's answer ignorerà anni, mesi e giorni per tale intervalli. Tuttavia, la risposta di shiplu è più accurata per gli intervalli che sono stati creati sottraendo due date. Per intervalli che consistono solo di ore, minuti e secondi, entrambi i metodi otterranno la risposta corretta.
@Brilliand Perché questa soluzione è meno accurata per gli intervalli creati sottraendo due date? Non capisco come. Puoi spiegare ? – MaxiWheat
@MaxiWheat Dire che l'intervallo di tempo è stato creato sottraendo 2015-02-01 dal 2015-03-01. Questa è una differenza di un mese, che equivale a 28 giorni. Il metodo di Shiplu considererà questo come un intervallo di 28 giorni, mentre il mio metodo lo tratterà come un intervallo di un mese, selezionerà arbitrariamente gennaio come il mese e produrrà un timestamp basato sui 31 giorni di gennaio. – Brilliand
Vorrei aggiungere solo shiplu's answer:
function dateIntervalToSeconds($interval)
{
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
return $interval->invert == 1 ? $seconds*(-1) : $seconds;
}
Per gestire intervalli negativi.
Si noti che - contrariamente a Brilliand's answer - Il codice sopra considererà correttamente anni, mesi e date. Perché $ interval-> days è un valore assoluto ($ interval-> d è relativo al mese).
EDIT: questa funzione è ancora correggere, come sottolinea @Brilliand. Un contro-esempio è
new DateInterval('P4M3DT2H');
Non gestisce bene i mesi.
Un esempio di un intervallo su cui questo fallirà è 'new DateInterval ('P4M3DT2H')'. Provalo e vedi: la variabile 'days' è vuota, nonostante l'intervallo si estenda per circa 123 giorni. – Brilliand
In futuro, se hai intenzione di accusarmi di essere sbagliato, ti chiedo di farlo in un commento sulla mia risposta. Mi ci è voluto molto tempo per accorgertene. – Brilliand
@ Brilliand, hai ragione. Ho modificato la mia risposta di conseguenza. –
restituisce '0 secondi' – sanchitkhanna26
@MarkBaker si, ecco perché ho cambiato la risposta –
Grande! Ho ottenuto questo lavoro. Grazie @shiplu – sanchitkhanna26