From cd32d5792e147c53c5bb38e7a9b228189d5d7fab Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Wed, 5 Jan 2011 04:13:23 +0000 Subject: [PATCH] Optimize unix timestamp to date-string conversion for very high year values --- ext/date/lib/unixtime2tm.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ext/date/lib/unixtime2tm.c b/ext/date/lib/unixtime2tm.c index 8dc852a6ed..871fa2f5e5 100644 --- a/ext/date/lib/unixtime2tm.c +++ b/ext/date/lib/unixtime2tm.c @@ -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)) { -- 2.40.0