]> granicus.if.org Git - php/commitdiff
Optimize unix timestamp to date-string conversion for very high year values
authorIlia Alshanetsky <iliaa@php.net>
Wed, 5 Jan 2011 04:13:23 +0000 (04:13 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 5 Jan 2011 04:13:23 +0000 (04:13 +0000)
ext/date/lib/unixtime2tm.c

index 8dc852a6edd72c6111632358710e9ab3c13f54fa..871fa2f5e515e9df4723e9f957b282f1a5fea00e 100644 (file)
@@ -55,6 +55,12 @@ void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts)
 
        if (ts >= 0) {
                tmp_days = days + 1;
+
+               if (tmp_days >= DAYS_PER_LYEAR_PERIOD || tmp_days <= -DAYS_PER_LYEAR_PERIOD) {
+                       cur_year += YEARS_PER_LYEAR_PERIOD * (tmp_days / DAYS_PER_LYEAR_PERIOD);
+                       tmp_days -= DAYS_PER_LYEAR_PERIOD * (tmp_days / DAYS_PER_LYEAR_PERIOD);
+               }
+
                while (tmp_days >= DAYS_PER_LYEAR) {
                        cur_year++;
                        if (timelib_is_leap(cur_year)) {