Mysql
 sql >> Database >  >> RDS >> Mysql

PHP Converti la data in giorni/ore/secondi vuoti

Dovresti sempre salvare le tue date nel formato datetime di MySQL (AAAA-MM-GG). Ciò consente di sfruttare facilmente la funzionalità di data incorporata di MySQL. Archiviarlo in qualsiasi altro formato significa (potenzialmente molto) più lavoro per te quando vuoi fare di più che visualizzare semplicemente quei valori.

Per realizzare ciò che vuoi fare con PHP dovresti DateTime() (basato su questa risposta ):

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
$interval  = $datetime1->diff($datetime2);
if ($interval->days <= 7)
{
    $elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
    $elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
    $elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
    echo $elapsed;
}
else 
{
    echo $firstDate;
}

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);

Queste righe creano DateTime() oggetti con le rispettive date.

$interval  = $datetime1->diff($datetime2);

Questa riga sottrae la seconda data dalla prima e restituisce la differenza come DateInterval() oggetto.

if ($interval->days > 7)

Questa riga controlla che siano trascorsi sette o più giorni tra le due date. In tal caso viene eseguito il primo blocco di codice. In caso contrario, viene stampata la prima data.

$elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;

Questo blocco di codice prende solo la differenza di data tra le due date (a DateInterval() oggetto) e lo formatta nel formato richiesto. La seconda riga rimuove tutti i periodi di tempo che non hanno valori (es. 0 mesi) e li rimuove dalla stringa. La terza riga prende tutti i periodi con un valore (ad es. 1 mese) e alla fine elimina le "s" non necessarie (ad es. 1 mese diventa 1 mese).