Výpočty rozdílů dat v jazyce PHP
Výpočty data jsou nezbytné pro úlohy, jako je plánování, kontrola platnosti, analýza a ověřování na základě času. Jazyk PHP poskytuje přesné a spolehlivé nástroje pro tyto operace prostřednictvím funkcí DateTime, DateInterval a časových značek. V tomto příspěvku na blogu vám na stručných příkladech ukážu, jak vypočítat rozdíly dat ve všech běžných jednotkách.
Použití DateTime a diff
DateTime představuje časový okamžik. Metoda diff porovnává dva objekty DateTime a vrací DateInterval.
$date1 = new DateTime('2024-01-01');$date2 = new DateTime('2024-02-10');$interval = $date1->diff($date2);
DateInterval vystavuje vlastnosti jako y, m, d, h, i, s. Automaticky zpracovává přestupné roky, hranice měsíců a změny denního světla.
Rozdíl ve dnech
Použití diff:
$date1 = new DateTime('2024-01-01');$date2 = new DateTime('2024-01-20');$days = $date1->diff($date2)->days;echo $days;
Vlastnost days vrací celkový rozdíl ve dnech.
Použití časových značek:
$seconds = abs(strtotime('2024-01-01') - strtotime('2024-01-20'));$days = intdiv($seconds, 86400);echo $days;
Časová razítka použijte, pokud potřebujete pouze kompletní počty dnů bez kalendářních pravidel.
Rozdíl v hodinách
Použití DateInterval:
$date1 = new DateTime('2024-01-01 00:00');$date2 = new DateTime('2024-01-02 05:00');$diff = $date1->diff($date2);$hours = $diff->days * 24 + $diff->h;echo $hours;
Použití časových značek:
$seconds = abs(strtotime('2024-01-01 00:00') - strtotime('2024-01-02 05:00'));$hours = intdiv($seconds, 3600);echo $hours;
Rozdíl v měsících
DateInterval zobrazuje roky a měsíce. Celkový počet měsíců je počet let vynásobený 12 plus měsíce.
$date1 = new DateTime('2023-01-01');$date2 = new DateTime('2024-04-01');$diff = $date1->diff($date2);$months = $diff->y * 12 + $diff->m;echo $months;
DateInterval správně zohledňuje různé délky měsíců.
Rozdíl v sekundách
Nejjednodušší metodou je použití časových značek.
$seconds = abs(strtotime('2024-01-01 12:00') - strtotime('2024-01-01 12:10'));echo $seconds;
Pokud potřebujete přesné rozdíly druhé úrovně, použijte časové značky.
Rozdíl v letech
DateInterval automaticky zpracovává přestupné roky.
$date1 = new DateTime('2020-02-29');$date2 = new DateTime('2024-02-28');$years = $date1->diff($date2)->y;echo $years;
Rozdíl od současnosti
Porovnání libovolného data s aktuálním okamžikem:
$target = new DateTime('2024-12-25');$now = new DateTime();$daysFromNow = $now->diff($target)->days;echo $daysFromNow;
Tím se získá celkový počet dní od dnešního dne do cílového data.
Rozdíl v minutách
Použití časových značek:
$seconds = abs(strtotime('2024-01-01 12:00') - strtotime('2024-01-01 12:45'));$minutes = intdiv($seconds, 60);echo $minutes;
Převod z DateInterval:
$diff = (new DateTime('12:00'))->diff(new DateTime('12:45'));$minutes = $diff->h * 60 + $diff->i;echo $minutes;
Rozdíl v hodinách a minutách
DateInterval může výsledek přímo formátovat.
$date1 = new DateTime('2024-01-01 08:00');$date2 = new DateTime('2024-01-01 12:45');echo $date1->diff($date2)->format('%h hours %i minutes');
Nebo vypočítejte celkový počet minut a rozdělte je:
$seconds = abs(strtotime('08:00') - strtotime('12:45'));$totalMinutes = intdiv($seconds, 60);$hours = intdiv($totalMinutes, 60);$minutes = $totalMinutes % 60;echo $hours . ' hours ' . $minutes . ' minutes';
Shrnutí doporučených přístupů
DateTime s diff je ideální pro výpočty s ohledem na kalendář, jako jsou měsíce, roky a porovnávání celých dat. Časová razítka jsou ideální pro hrubý výpočet uplynulých sekund, minut a hodin, kdy jsou pravidla kalendáře irelevantní. Použijte DateInterval metoda formátování pro čistý kombinovaný výstup, například hodiny a minuty.