Data byste měli vždy ukládat ve formátu data a času MySQL (YYYY-MM-DD). To vám umožní snadno využít vestavěné funkce data MySQL. Uložení v jakémkoli jiném formátu pro vás znamená (potenciálně mnohem) více práce, když chcete udělat více, než jen zobrazit tyto hodnoty.
Chcete-li dosáhnout toho, co chcete dělat s PHP, měli byste DateTime()
(na základě této odpovědi
):
$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);
Tyto řádky vytvářejí DateTime()
objekty s příslušným datem.
$interval = $datetime1->diff($datetime2);
Tento řádek odečte druhé datum od prvního a vrátí rozdíl jako DateInterval()
objekt.
if ($interval->days > 7)
Tento řádek kontroluje, zda mezi těmito dvěma daty uplynulo sedm nebo více dní. Pokud ano, provede se první blok kódu. Pokud ne, vytiskne se první datum.
$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;
Tento blok kódu bere pouze rozdíl mezi dvěma daty (a DateInterval()
objekt) a naformátuje jej do požadovaného formátu. Druhý řádek odstraní všechna časová období, která nemají žádné hodnoty (tj. 0 měsíců), a odstraní je z řetězce. Třetí řádek obsahuje libovolná období s jednou hodnotou (tj. 1 měsíc) a na konci ořezává nepotřebná „s“ (tj. z 1 měsíce se stane 1 měsíc).