#define TIMELIB_ZONETYPE_ABBR 2
#define TIMELIB_ZONETYPE_ID 3
-#define SECS_PER_DAY 86400
-#define DAYS_PER_YEAR 365
-#define DAYS_PER_LYEAR 366
+#define SECS_PER_ERA 12622780800L
+#define SECS_PER_DAY 86400
+#define DAYS_PER_YEAR 365
+#define DAYS_PER_LYEAR 366
#define timelib_is_leap(y) ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0))
{
timelib_sll i;
timelib_sll res = 0;
+ timelib_sll eras;
+
+ eras = (year - 1970) / 400;
+ if (eras != 0) {
+ year = year - (eras * 400);
+ res += (SECS_PER_ERA * eras);
+ }
if (year >= 1970) {
for (i = year - 1; i >= 1970; i--) {
--- /dev/null
+--TEST--
+Bug #36988 (mktime freezes on long numbers)
+--FILE--
+<?php
+$start = microtime(true);
+$a = mktime(1, 1, 1, 1, 1, 11111111111);
+echo (microtime(true) - $start) < 1 ? "smaller than one second" : "more than a second";
+?>
+--EXPECT--
+smaller than one second