U moet uw datums altijd opslaan in het datetime-formaat van MySQL (JJJJ-MM-DD). Hierdoor kunt u eenvoudig profiteren van de ingebouwde datumfunctionaliteit van MySQL. Als u het in een ander formaat opslaat, betekent dit (mogelijk veel) meer werk voor u als u meer wilt doen dan alleen die waarden weergeven.
Om te bereiken wat je met PHP wilt doen, zou je DateTime()
(gebaseerd op dit antwoord
):
$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);
Deze regels creëren DateTime()
objecten met hun respectievelijke datums.
$interval = $datetime1->diff($datetime2);
Deze regel trekt de tweede datum van de eerste af en retourneert het verschil als een DateInterval()
voorwerp.
if ($interval->days > 7)
Deze regel controleert of er zeven of meer dagen zijn verstreken tussen de twee datums. Als dat het geval is, wordt het eerste codeblok uitgevoerd. Zo niet, dan wordt de eerste datum uitgeprint.
$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;
Dit codeblok neemt alleen het datumverschil tussen de twee datums (a DateInterval()
object) en formatteert het in het door u gevraagde formaat. De tweede regel verwijdert alle tijdsperioden die geen waarden hebben (d.w.z. 0 maanden) en verwijdert ze uit de tekenreeks. De derde regel neemt alle perioden met één waarde (d.w.z. 1 maand) en verwijdert de onnodige 's' aan het einde (d.w.z. 1 maand wordt 1 maand).