<?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