derick          Thu Apr  1 16:40:56 2004 EDT

  Modified files:              
    /php-src/ext/standard/tests/time    bug27780.phpt 
    /php-src/ext/standard       parsedate.y 
  Log:
  - MFB: Fixed bug #27780 (strtotime(+1 xxx) returns a wrong date/time)
  
  
http://cvs.php.net/diff.php/php-src/ext/standard/tests/time/bug27780.phpt?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/standard/tests/time/bug27780.phpt
diff -u /dev/null php-src/ext/standard/tests/time/bug27780.phpt:1.2
--- /dev/null   Thu Apr  1 16:40:56 2004
+++ php-src/ext/standard/tests/time/bug27780.phpt       Thu Apr  1 16:40:56 2004
@@ -0,0 +1,113 @@
+--TEST--
+Bug #27780 (strtotime(+1 xxx) returns a wrong date/time)
+--FILE--
+<?php
+$timezones = array (
+       "America/Chicago", "Europe/Amsterdam", "Asia/Jerusalem",
+       "Asia/Singapore", "America/Sao_Paulo"
+);
+
+$timestrings = array (
+       "2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds",
+       "2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds",
+       "2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds",
+       "2004-04-07 00:00:00 -21 days",
+       "2004-04-07 00:00:00 11 days ago",
+       "2004-04-07 00:00:00 -10 day +2 hours",
+       "2004-04-07 00:00:00 -1 day",
+       "2004-04-07 00:00:00",
+       "2004-04-07 00:00:00 +1 hour",
+       "2004-04-07 00:00:00 +2 hour",
+       "2004-04-07 00:00:00 +1 day",
+       "2004-04-07 00:00:00 1 day",
+       "2004-04-07 00:00:00 +21 days",
+);
+
+foreach ($timezones as $timezone) {
+       putenv("TZ=$timezone");
+       echo $timezone, "\n";
+
+       foreach ($timestrings as $timestring) {
+               $time = strtotime($timestring);
+
+               echo $time, strftime(" [%Y-%m-%d %H:%M:%S %Z]", $time), " 
[$timestring]\n";
+       }
+
+       echo "\n";
+}
+?>
+--EXPECT--
+America/Chicago
+1076824799 [2004-02-14 23:59:59 CST] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +59 seconds]
+1076824800 [2004-02-15 00:00:00 CST] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +60 seconds]
+1076824801 [2004-02-15 00:00:01 CST] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +61 seconds]
+1079503200 [2004-03-17 00:00:00 CST] [2004-04-07 00:00:00 -21 days]
+1080367200 [2004-03-27 00:00:00 CST] [2004-04-07 00:00:00 11 days ago]
+1080460800 [2004-03-28 02:00:00 CST] [2004-04-07 00:00:00 -10 day +2 hours]
+1081227600 [2004-04-06 00:00:00 CDT] [2004-04-07 00:00:00 -1 day]
+1081314000 [2004-04-07 00:00:00 CDT] [2004-04-07 00:00:00]
+1081317600 [2004-04-07 01:00:00 CDT] [2004-04-07 00:00:00 +1 hour]
+1081321200 [2004-04-07 02:00:00 CDT] [2004-04-07 00:00:00 +2 hour]
+1081400400 [2004-04-08 00:00:00 CDT] [2004-04-07 00:00:00 +1 day]
+1081400400 [2004-04-08 00:00:00 CDT] [2004-04-07 00:00:00 1 day]
+1083128400 [2004-04-28 00:00:00 CDT] [2004-04-07 00:00:00 +21 days]
+
+Europe/Amsterdam
+1076799599 [2004-02-14 23:59:59 CET] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +59 seconds]
+1076799600 [2004-02-15 00:00:00 CET] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +60 seconds]
+1076799601 [2004-02-15 00:00:01 CET] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +61 seconds]
+1079478000 [2004-03-17 00:00:00 CET] [2004-04-07 00:00:00 -21 days]
+1080342000 [2004-03-27 00:00:00 CET] [2004-04-07 00:00:00 11 days ago]
+1080435600 [2004-03-28 03:00:00 CEST] [2004-04-07 00:00:00 -10 day +2 hours]
+1081202400 [2004-04-06 00:00:00 CEST] [2004-04-07 00:00:00 -1 day]
+1081288800 [2004-04-07 00:00:00 CEST] [2004-04-07 00:00:00]
+1081292400 [2004-04-07 01:00:00 CEST] [2004-04-07 00:00:00 +1 hour]
+1081296000 [2004-04-07 02:00:00 CEST] [2004-04-07 00:00:00 +2 hour]
+1081375200 [2004-04-08 00:00:00 CEST] [2004-04-07 00:00:00 +1 day]
+1081375200 [2004-04-08 00:00:00 CEST] [2004-04-07 00:00:00 1 day]
+1083103200 [2004-04-28 00:00:00 CEST] [2004-04-07 00:00:00 +21 days]
+
+Asia/Jerusalem
+1076795999 [2004-02-14 23:59:59 IST] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +59 seconds]
+1076796000 [2004-02-15 00:00:00 IST] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +60 seconds]
+1076796001 [2004-02-15 00:00:01 IST] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +61 seconds]
+1079474400 [2004-03-17 00:00:00 IST] [2004-04-07 00:00:00 -21 days]
+1080338400 [2004-03-27 00:00:00 IST] [2004-04-07 00:00:00 11 days ago]
+1080432000 [2004-03-28 02:00:00 IST] [2004-04-07 00:00:00 -10 day +2 hours]
+1081202400 [2004-04-06 00:00:00 IST] [2004-04-07 00:00:00 -1 day]
+1081288800 [2004-04-07 00:00:00 IST] [2004-04-07 00:00:00]
+1081292400 [2004-04-07 02:00:00 IDT] [2004-04-07 00:00:00 +1 hour]
+1081292400 [2004-04-07 02:00:00 IDT] [2004-04-07 00:00:00 +2 hour]
+1081371600 [2004-04-08 00:00:00 IDT] [2004-04-07 00:00:00 +1 day]
+1081371600 [2004-04-08 00:00:00 IDT] [2004-04-07 00:00:00 1 day]
+1083099600 [2004-04-28 00:00:00 IDT] [2004-04-07 00:00:00 +21 days]
+
+Asia/Singapore
+1076774399 [2004-02-14 23:59:59 SGT] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +59 seconds]
+1076774400 [2004-02-15 00:00:00 SGT] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +60 seconds]
+1076774401 [2004-02-15 00:00:01 SGT] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +61 seconds]
+1079452800 [2004-03-17 00:00:00 SGT] [2004-04-07 00:00:00 -21 days]
+1080316800 [2004-03-27 00:00:00 SGT] [2004-04-07 00:00:00 11 days ago]
+1080410400 [2004-03-28 02:00:00 SGT] [2004-04-07 00:00:00 -10 day +2 hours]
+1081180800 [2004-04-06 00:00:00 SGT] [2004-04-07 00:00:00 -1 day]
+1081267200 [2004-04-07 00:00:00 SGT] [2004-04-07 00:00:00]
+1081270800 [2004-04-07 01:00:00 SGT] [2004-04-07 00:00:00 +1 hour]
+1081274400 [2004-04-07 02:00:00 SGT] [2004-04-07 00:00:00 +2 hour]
+1081353600 [2004-04-08 00:00:00 SGT] [2004-04-07 00:00:00 +1 day]
+1081353600 [2004-04-08 00:00:00 SGT] [2004-04-07 00:00:00 1 day]
+1083081600 [2004-04-28 00:00:00 SGT] [2004-04-07 00:00:00 +21 days]
+
+America/Sao_Paulo
+1076810399 [2004-02-14 23:59:59 BRST] [2004-04-07 00:00:00 -2 months +7 days +23 
hours +59 minutes +59 seconds]
+1076810400 [2004-02-14 23:00:00 BRT] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +60 seconds]
+1076810401 [2004-02-14 23:00:01 BRT] [2004-04-07 00:00:00 -2 months +7 days +23 hours 
+59 minutes +61 seconds]
+1079492400 [2004-03-17 00:00:00 BRT] [2004-04-07 00:00:00 -21 days]
+1080356400 [2004-03-27 00:00:00 BRT] [2004-04-07 00:00:00 11 days ago]
+1080450000 [2004-03-28 02:00:00 BRT] [2004-04-07 00:00:00 -10 day +2 hours]
+1081220400 [2004-04-06 00:00:00 BRT] [2004-04-07 00:00:00 -1 day]
+1081306800 [2004-04-07 00:00:00 BRT] [2004-04-07 00:00:00]
+1081310400 [2004-04-07 01:00:00 BRT] [2004-04-07 00:00:00 +1 hour]
+1081314000 [2004-04-07 02:00:00 BRT] [2004-04-07 00:00:00 +2 hour]
+1081393200 [2004-04-08 00:00:00 BRT] [2004-04-07 00:00:00 +1 day]
+1081393200 [2004-04-08 00:00:00 BRT] [2004-04-07 00:00:00 1 day]
+1083121200 [2004-04-28 00:00:00 BRT] [2004-04-07 00:00:00 +21 days]
http://cvs.php.net/diff.php/php-src/ext/standard/parsedate.y?r1=1.53&r2=1.54&ty=u
Index: php-src/ext/standard/parsedate.y
diff -u php-src/ext/standard/parsedate.y:1.53 php-src/ext/standard/parsedate.y:1.54
--- php-src/ext/standard/parsedate.y:1.53       Tue Mar  2 08:12:44 2004
+++ php-src/ext/standard/parsedate.y    Thu Apr  1 16:40:56 2004
@@ -8,7 +8,7 @@
 **  This code is in the public domain and has no copyright.
 */
 
-/* $Id: parsedate.y,v 1.53 2004/03/02 13:12:44 derick Exp $ */
+/* $Id: parsedate.y,v 1.54 2004/04/01 21:40:56 derick Exp $ */
 
 #include "php.h"
 
@@ -199,13 +199,20 @@
        /* | pgsqltime  ... shares a common spec with ISO8601 */
        ;
 
-iso8601time_colon: HMStime_with_colon sec_fraction_part iso8601zonepart {
+iso8601time_colon: HMStime_with_colon sec_fraction_part rel {
            ((struct date_yy *)parm)->yyMeridian = MER24;
        }
-       |  HMtime_with_colon sec_fraction_part iso8601zonepart {
+       | HMtime_with_colon sec_fraction_part rel {
+           ((struct date_yy *)parm)->yyMeridian = MER24;
            ((struct date_yy *)parm)->yySeconds = 0;
+       }
+       | HMStime_with_colon sec_fraction_part iso8601zonepart {
            ((struct date_yy *)parm)->yyMeridian = MER24;
        }
+       | HMtime_with_colon sec_fraction_part iso8601zonepart {
+           ((struct date_yy *)parm)->yyMeridian = MER24;
+           ((struct date_yy *)parm)->yySeconds = 0;
+       }
     ;
 
 iso8601zonepart: zonepart_numeric_without_colon {
@@ -1071,7 +1078,7 @@
   tm.tm_year = ToYear (date.yyYear) - TM_YEAR_ORIGIN + date.yyRelYear;
   tm.tm_mon = date.yyMonth - 1 + date.yyRelMonth;
   tm.tm_mday = date.yyDay + date.yyRelDay;
-  if (date.yyHaveTime || (date.yyHaveRel && !date.yyHaveDate && !date.yyHaveDay))
+  if (date.yyHaveTime /*|| (date.yyHaveRel && !date.yyHaveDate && !date.yyHaveDay) */)
     {
       tm.tm_hour = ToHour (date.yyHour, date.yyMeridian);
       if (tm.tm_hour < 0)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to