• File: mktime.php
  • Full Path: /home/dealkatnwc/www/wp-content/plugins/easy-timer/includes/mktime.php
  • Date Modified: 01/15/2026 11:06 PM
  • File size: 2.03 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php date_default_timezone_set('UTC');
if (($mon === false) || ($day === false) || ($year === false)) {
$now  = getdate();
if ($mon  === false) { $mon  = $now['mon']; }
if ($day  === false) { $day  = $now['mday']; }
if ($year === false) { $year = $now['year']; } }

$hr = (int) $hr; $min = (int) $min; $sec = (int) $sec;
$mon = (int) $mon; $day = (int) $day; $year = (int) $year;

$totalSec = 3600*$hr + 60*$min + $sec;
$daysAdd = intdiv($totalSec, 86400);
if (($totalSec < 0) && ($totalSec % 86400)) { $daysAdd--; }
$secOfDay = $totalSec - 86400*$daysAdd;
if ($secOfDay < 0) { $secOfDay += 86400; $daysAdd--; }
$mon--;
$yOff = intdiv($mon, 12);
if (($mon < 0) && ($mon % 12)) { $yOff--; }
$mon = $mon - 12*$yOff;
$year += $yOff;
$mon++;
$day += $daysAdd;

$isLeap = static function(int $y): bool { return (($y % 4 === 0) && (($y % 100 !== 0) || ($y % 400 === 0))); };

$monthLen = static function(int $y, int $m) use ($isLeap): int {
static $len = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
return ((($m === 2) && ($isLeap($y))) ? 29 : $len[$m-1]); };

while ($day <= 0) {
if (--$mon < 1) { $mon = 12; $year--; }
$day += $monthLen($year, $mon); }
while ($day > ($ml = $monthLen($year, $mon))) {
$day -= $ml;
if (++$mon > 12) { $mon = 1; $year++; } }

$daysFromCivil = static function(int $y, int $m, int $d): int {
$y -= (($m <= 2) ? 1 : 0);
$era = intdiv($y, 400);
if (($y < 0) && ($y % 400)) { $era--; }
$yoe = $y - 400*$era;
$mAdj = $m + (($m > 2) ? -3 : 9);
$doy = intdiv(153*$mAdj + 2, 5) + $d - 1;
$doe = 365*$yoe + intdiv($yoe, 4) - intdiv($yoe, 100) + $doy;
return (146097*$era + $doe - 719468); };
    
$days = $daysFromCivil($year, $mon, $day);
$tz = new DateTimeZone(date_default_timezone_get());
$dtStr = sprintf('%04d-%02d-%02d %02d:%02d:%02d', $year, $mon, $day, (int) floor($secOfDay/3600), (int) floor(($secOfDay%3600)/60), $secOfDay%60);
$dt = new DateTimeImmutable($dtStr, $tz);
$offset = $tz->getOffset($dt);
$ts = 86400*$days + $secOfDay - $offset;

if (PHP_INT_SIZE < 8) { if (($ts > PHP_INT_MAX) || ($ts < PHP_INT_MIN)) { return (float) $ts; } }