com php-src: Fixed a few DST changeover issues.: ext/date/lib/interval.c ext/date/tests/rfc-datetime_and_daylight_saving_time-ty pe3-ba.phpt
ext/date/tests/rfc-datetime_and_daylight _saving_time-type3-bd2.phpt ext/date/tests/rfc-date time_and_daylight_saving_time-type3-bs.phpt ext/d
ate/tests/rfc-datetime_and_daylight_saving_time-type3 -fs.phpt

From: Date: Thu, 28 Nov 2013 12:02:36 +0000
Subject: com php-src: Fixed a few DST changeover issues.: ext/date/lib/interval.c ext/date/tests/rfc-datetime_and_daylight_saving_time-ty pe3-ba.phpt
ext/date/tests/rfc-datetime_and_daylight _saving_time-type3-bd2.phpt ext/date/tests/rfc-date time_and_daylight_saving_time-type3-bs.phpt ext/d
ate/tests/rfc-datetime_and_daylight_saving_time-type3 -fs.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-74132@lists.php.net to get a copy of this message
Commit: 582f6e529e843b412d582023bf0270e47b1aa468 Author: Derick Rethans <github@derickrethans.nl> Thu, 20 Jun 2013 09:28:23 +0100 Parents: 5d0c526199add0e4f054a57db29d882c8ad89a23 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=582f6e529e843b412d582023bf0270e47b1aa468 Log: Fixed a few DST changeover issues. Changed paths: M ext/date/lib/interval.c M ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-ba.phpt M ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bd2.phpt M ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bs.phpt M ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-fs.phpt Diff: diff --git a/ext/date/lib/interval.c b/ext/date/lib/interval.c index 7fa1fc5..dce62f3 100644 --- a/ext/date/lib/interval.c +++ b/ext/date/lib/interval..c @@ -111,6 +111,14 @@ timelib_time *timelib_add(timelib_time *old_time, timelib_rel_time *interval) t->sse_uptodate = 0; timelib_update_ts(t, NULL); + +// printf("%lld %lld %d\n", old_time->dst, t->dst, (t->sse - old_time->sse)); + /* Adjust for backwards DST changeover */ + if (old_time->dst == 1 && t->dst == 0 && !interval->y && !interval->m && !interval->d) { + t->sse -= old_time->z; + t->sse += t->z; + } + timelib_update_from_sse(t); t->have_relative = 0; @@ -137,6 +145,18 @@ timelib_time *timelib_sub(timelib_time *old_time, timelib_rel_time *interval) t->sse_uptodate = 0; timelib_update_ts(t, NULL); + + /* Adjust for backwards DST changeover */ + if (old_time->dst == 1 && t->dst == 0 && !interval->y && !interval->m && !interval->d) { + t->sse -= old_time->z; + t->sse += t->z; + } + /* Adjust for forwards DST changeover */ + if (old_time->dst == 0 && t->dst == 1 && !interval->y && !interval->m && !interval->d ) { + t->sse -= old_time->z; + t->sse += t->z; + } + timelib_update_from_sse(t); t->have_relative = 0; diff --git a/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-ba.phpt b/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-ba.phpt index 45db229..fdbe96d 100644 --- a/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-ba.phpt +++ b/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-ba.phpt @@ -90,7 +90,7 @@ ba4 2010-11-06 04:30:00 EDT America/New_York + PT23H = 2010-11-07 02:30:00 EST A ba5 2010-11-06 04:30:00 EDT America/New_York + PT22H = 2010-11-07 01:30:00 EST America/New_York ba6 2010-11-06 04:30:00 EDT America/New_York + PT21H = 2010-11-07 01:30:00 EDT America/New_York ba7 2010-11-06 01:30:00 EDT America/New_York + P1D = 2010-11-07 01:30:00 EDT America/New_York -ba8 2010-11-06 01:30:00 EDT America/New_York + P1DT1H = 2010-11-07 01:30:00 EST America/New_York +ba8 2010-11-06 01:30:00 EDT America/New_York + P1DT1H = 2010-11-07 02:30:00 EST America/New_York ba9 2010-11-06 04:30:00 EDT America/New_York + PT25H = 2010-11-07 04:30:00 EST America/New_York ba10 2010-11-06 03:30:00 EDT America/New_York + P1D = 2010-11-07 03:30:00 EST America/New_York ba11 2010-11-06 02:30:00 EDT America/New_York + P1D = 2010-11-07 02:30:00 EST America/New_York diff --git a/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bd2.phpt b/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bd2.phpt index c2fe4bf..62dab5d 100644 --- a/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bd2.phpt +++ b/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bd2.phpt @@ -25,7 +25,7 @@ $end = new DateTime('2010-11-07 05:30:00'); $end->setTimeZone($tz); $start = new DateTime('2010-11-06 04:30:59'); echo 'bd0 ' . $end->format($date_format) . ' - ' . $start->format($date_format) - . ' = ' . $start->diff($end)->format('PT%hH%iM%sS') . "\n"; + . ' = ' . $start->diff($end)->format('P%dDT%hH%iM%sS') . "\n"; $end = new DateTime('2010-11-07 01:30:00 EST'); $end->setTimeZone($tz); diff --git a/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bs.phpt b/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bs.phpt index 0dd384a..138c68f 100644 --- a/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bs.phpt +++ b/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-bs.phpt @@ -6,6 +6,7 @@ Daniel Convissor <danielc@php.net> <?php date_default_timezone_set('America/New_York'); +$tz = new DateTimeZone('America/New_York'); $date_format = 'Y-m-d H:i:s T e'; $interval_format = 'P%dDT%hH'; diff --git a/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-fs.phpt b/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-fs.phpt index 4b3c254..f8066ae 100644 --- a/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-fs.phpt +++ b/ext/date/tests/rfc-datetime_and_daylight_saving_time-type3-fs.phpt @@ -62,4 +62,4 @@ fs3 2010-03-14 03:30:00 EDT America/New_York - PT22H = 2010-03-13 04:30:00 EST A fs4 2010-03-14 01:30:00 EST America/New_York - PT21H = 2010-03-13 04:30:00 EST America/New_York fs5 2010-03-14 01:30:00 EST America/New_York - P1D = 2010-03-13 01:30:00 EST America/New_York fs6 2010-03-15 03:30:00 EDT America/New_York - P1D = 2010-03-14 03:30:00 EDT America/New_York -fs7 2010-03-15 03:30:00 EDT America/New_York - P1D = 2010-03-14 03:30:00 EDT America/New_York +fs7 2010-03-15 02:30:00 EDT America/New_York - P1D = 2010-03-14 03:30:00 EDT America/New_York

« previous php.cvs (#74132) next »