Du bør altid gemme dine datoer i MySQL's datetime-format (ÅÅÅÅ-MM-DD). Dette giver dig mulighed for nemt at drage fordel af MySQL's indbyggede datofunktionalitet. At gemme det i et hvilket som helst andet format betyder (potentielt meget) mere arbejde for dig, når du vil gøre mere end blot at vise disse værdier.
For at opnå det, du vil med PHP, skal du DateTime()
(baseret på dette svar
):
$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);
Disse linjer skaber DateTime()
genstande med deres respektive datoer.
$interval = $datetime1->diff($datetime2);
Disse linjer trækker den anden dato fra den første og returnerer forskellen som en DateInterval()
objekt.
if ($interval->days > 7)
Denne linje kontrollerer, at der er gået syv eller flere dage mellem de to datoer. I så fald udføres den første kodeblok. Hvis ikke, udskrives den første dato.
$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;
Denne kodeblok tager kun datoforskellen mellem de to datoer (en DateInterval( ) objekt) og formaterer det i det format, du anmodede om. Den anden linje fjerner alle tidsperioder, der ikke har nogen værdier (dvs. 0 måneder) og fjerner dem fra strengen. Den tredje linje tager alle perioder med én værdi (dvs. 1 måned) og fjerner de unødvendige "s" i slutningen (dvs. 1 måned bliver til 1 måned).