3v4l.org

run code in 300+ PHP versions simultaneously
<?php const SECONDS_PER_MINUTE = 60; const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE; const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR; const DAYS_PER_YEAR = 365; const DAYS_PER_LEAP_YEAR = DAYS_PER_YEAR + 1; const EPOCH_MONTH = 1; const EPOCH_YEAR = 1970; function getDateTime(int $timestamp) : array { $days = intdiv($timestamp, SECONDS_PER_DAY); $year = EPOCH_YEAR; while ($days >= getDaysForYear($year)) { $days -= getDaysForYear($year); $year++; } $daysPerMonth = getDaysPerMonth($year); $month = EPOCH_MONTH; while ($days >= $daysPerMonth[$month]) { $days -= $daysPerMonth[$month]; $month++; } $day = $days + 1; $secondsRemaining = $timestamp % SECONDS_PER_DAY; $hour = intdiv($secondsRemaining, SECONDS_PER_HOUR); $minute = intdiv($secondsRemaining, SECONDS_PER_MINUTE) % SECONDS_PER_MINUTE; $second = $secondsRemaining % SECONDS_PER_MINUTE; return [ 'year' => $year, 'month' => $month, 'day' => $day, 'hour' => $hour, 'minute' => $minute, 'second' => $second ]; } function isLeapYear(int $year) : bool { return $year % 400 === 0 || ($year % 4 === 0 && $year % 100 !== 0); } function getDaysForYear(int $year) : int { return isLeapYear($year) ? DAYS_PER_LEAP_YEAR : DAYS_PER_YEAR; } function getDaysPerMonth(int $year) : array { return [0, 31, isLeapYear($year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; } $time = 1714613137; //08/18/2016 @ 2:41am (UTC) print_r(getDateTime($time));
Output for 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.7
Array ( [year] => 2024 [month] => 5 [day] => 2 [hour] => 1 [minute] => 25 [second] => 37 )

preferences:
48.28 ms | 402 KiB | 62 Q