mirror of
https://github.com/php/php-src.git
synced 2024-11-28 04:14:26 +08:00
Merge branch 'pull-request/210' into PHP-5.4
* pull-request/210: Fix bugs 62561,62896 (Modifying DateTime::__construct,date_create adds an hour) Prevent a unix timestamp, which is always GMT when being parsed, from taking on the local timezones DST flag.
This commit is contained in:
commit
40bb9254c5
5
NEWS
5
NEWS
@ -33,6 +33,11 @@ PHP NEWS
|
||||
. Fixed bug #62085 (file_get_contents a remote file by Curl wrapper will
|
||||
cause cpu Soaring). (Pierrick)
|
||||
|
||||
- Date:
|
||||
. Fixed bug #62896 ("DateTime->modify('+0 days')" modifies DateTime object)
|
||||
(Lonny Kapelushnik)
|
||||
. Fixed bug #62561 (DateTime add 'P1D' adds 25 hours). (Lonny Kapelushnik)
|
||||
|
||||
- DOM:
|
||||
. Fixed bug #63015 (Incorrect arginfo for DOMErrorHandler). (Rob)
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Generated by re2c 0.13.5 on Mon Dec 5 22:02:27 2011 */
|
||||
/* Generated by re2c 0.13.5 on Sun Sep 30 20:14:42 2012 */
|
||||
#line 1 "ext/date/lib/parse_date.re"
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
@ -995,7 +995,7 @@ std:
|
||||
}
|
||||
yy2:
|
||||
YYDEBUG(2, *YYCURSOR);
|
||||
#line 1082 "ext/date/lib/parse_date.re"
|
||||
#line 1083 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("firstdayof | lastdayof");
|
||||
TIMELIB_INIT;
|
||||
@ -1034,7 +1034,7 @@ yy3:
|
||||
}
|
||||
yy4:
|
||||
YYDEBUG(4, *YYCURSOR);
|
||||
#line 1676 "ext/date/lib/parse_date.re"
|
||||
#line 1677 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int tz_not_found;
|
||||
DEBUG_OUTPUT("tzcorrection | tz");
|
||||
@ -1358,7 +1358,7 @@ yy12:
|
||||
if (yych <= '9') goto yy1385;
|
||||
yy13:
|
||||
YYDEBUG(13, *YYCURSOR);
|
||||
#line 1771 "ext/date/lib/parse_date.re"
|
||||
#line 1772 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
add_error(s, "Unexpected character");
|
||||
goto std;
|
||||
@ -2420,7 +2420,7 @@ yy49:
|
||||
if (yych <= '9') goto yy55;
|
||||
yy50:
|
||||
YYDEBUG(50, *YYCURSOR);
|
||||
#line 1760 "ext/date/lib/parse_date.re"
|
||||
#line 1761 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
goto std;
|
||||
}
|
||||
@ -2433,7 +2433,7 @@ yy52:
|
||||
YYDEBUG(52, *YYCURSOR);
|
||||
++YYCURSOR;
|
||||
YYDEBUG(53, *YYCURSOR);
|
||||
#line 1765 "ext/date/lib/parse_date.re"
|
||||
#line 1766 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
s->pos = cursor; s->line++;
|
||||
goto std;
|
||||
@ -2825,7 +2825,7 @@ yy72:
|
||||
if (yych == 's') goto yy74;
|
||||
yy73:
|
||||
YYDEBUG(73, *YYCURSOR);
|
||||
#line 1744 "ext/date/lib/parse_date.re"
|
||||
#line 1745 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
timelib_ull i;
|
||||
DEBUG_OUTPUT("relative");
|
||||
@ -3602,7 +3602,7 @@ yy166:
|
||||
}
|
||||
yy167:
|
||||
YYDEBUG(167, *YYCURSOR);
|
||||
#line 1607 "ext/date/lib/parse_date.re"
|
||||
#line 1608 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
const timelib_relunit* relunit;
|
||||
DEBUG_OUTPUT("daytext");
|
||||
@ -4139,7 +4139,7 @@ yy193:
|
||||
}
|
||||
yy194:
|
||||
YYDEBUG(194, *YYCURSOR);
|
||||
#line 1666 "ext/date/lib/parse_date.re"
|
||||
#line 1667 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("monthtext");
|
||||
TIMELIB_INIT;
|
||||
@ -4199,7 +4199,7 @@ yy198:
|
||||
}
|
||||
yy199:
|
||||
YYDEBUG(199, *YYCURSOR);
|
||||
#line 1412 "ext/date/lib/parse_date.re"
|
||||
#line 1413 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("datetextual | datenoyear");
|
||||
@ -4481,7 +4481,7 @@ yy222:
|
||||
}
|
||||
yy223:
|
||||
YYDEBUG(223, *YYCURSOR);
|
||||
#line 1714 "ext/date/lib/parse_date.re"
|
||||
#line 1715 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int tz_not_found;
|
||||
DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz");
|
||||
@ -5208,7 +5208,7 @@ yy278:
|
||||
YYDEBUG(278, *YYCURSOR);
|
||||
++YYCURSOR;
|
||||
YYDEBUG(279, *YYCURSOR);
|
||||
#line 1690 "ext/date/lib/parse_date.re"
|
||||
#line 1691 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12");
|
||||
TIMELIB_INIT;
|
||||
@ -5409,7 +5409,7 @@ yy294:
|
||||
++YYCURSOR;
|
||||
yy295:
|
||||
YYDEBUG(295, *YYCURSOR);
|
||||
#line 1384 "ext/date/lib/parse_date.re"
|
||||
#line 1385 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("datenoday");
|
||||
@ -6642,7 +6642,7 @@ yy362:
|
||||
if (yych <= '9') goto yy365;
|
||||
yy364:
|
||||
YYDEBUG(364, *YYCURSOR);
|
||||
#line 1528 "ext/date/lib/parse_date.re"
|
||||
#line 1529 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("pgtextshort");
|
||||
@ -7293,7 +7293,7 @@ yy392:
|
||||
}
|
||||
yy393:
|
||||
YYDEBUG(393, *YYCURSOR);
|
||||
#line 1586 "ext/date/lib/parse_date.re"
|
||||
#line 1587 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("ago");
|
||||
TIMELIB_INIT;
|
||||
@ -9063,7 +9063,7 @@ yy454:
|
||||
++YYCURSOR;
|
||||
yy455:
|
||||
YYDEBUG(455, *YYCURSOR);
|
||||
#line 1289 "ext/date/lib/parse_date.re"
|
||||
#line 1290 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("iso8601date4 | iso8601date2 | iso8601dateslash | dateslash");
|
||||
TIMELIB_INIT;
|
||||
@ -9634,7 +9634,7 @@ yy475:
|
||||
}
|
||||
yy476:
|
||||
YYDEBUG(476, *YYCURSOR);
|
||||
#line 1426 "ext/date/lib/parse_date.re"
|
||||
#line 1427 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("datenoyearrev");
|
||||
TIMELIB_INIT;
|
||||
@ -9786,7 +9786,7 @@ yy488:
|
||||
YYDEBUG(488, *YYCURSOR);
|
||||
++YYCURSOR;
|
||||
YYDEBUG(489, *YYCURSOR);
|
||||
#line 1144 "ext/date/lib/parse_date.re"
|
||||
#line 1145 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12");
|
||||
TIMELIB_INIT;
|
||||
@ -9815,7 +9815,7 @@ yy490:
|
||||
}
|
||||
yy491:
|
||||
YYDEBUG(491, *YYCURSOR);
|
||||
#line 1181 "ext/date/lib/parse_date.re"
|
||||
#line 1182 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int tz_not_found;
|
||||
DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long");
|
||||
@ -10150,7 +10150,7 @@ yy523:
|
||||
YYDEBUG(523, *YYCURSOR);
|
||||
++YYCURSOR;
|
||||
YYDEBUG(524, *YYCURSOR);
|
||||
#line 1161 "ext/date/lib/parse_date.re"
|
||||
#line 1162 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("mssqltime");
|
||||
TIMELIB_INIT;
|
||||
@ -10275,7 +10275,7 @@ yy534:
|
||||
if (yych <= '9') goto yy541;
|
||||
yy535:
|
||||
YYDEBUG(535, *YYCURSOR);
|
||||
#line 1343 "ext/date/lib/parse_date.re"
|
||||
#line 1344 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("datefull");
|
||||
@ -11026,7 +11026,7 @@ yy605:
|
||||
YYDEBUG(606, *YYCURSOR);
|
||||
++YYCURSOR;
|
||||
YYDEBUG(607, *YYCURSOR);
|
||||
#line 1358 "ext/date/lib/parse_date.re"
|
||||
#line 1359 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("pointed date YYYY");
|
||||
TIMELIB_INIT;
|
||||
@ -11073,7 +11073,7 @@ yy611:
|
||||
if (yych <= '9') goto yy605;
|
||||
yy612:
|
||||
YYDEBUG(612, *YYCURSOR);
|
||||
#line 1370 "ext/date/lib/parse_date.re"
|
||||
#line 1371 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("pointed date YY");
|
||||
@ -11727,7 +11727,7 @@ yy656:
|
||||
}
|
||||
yy657:
|
||||
YYDEBUG(657, *YYCURSOR);
|
||||
#line 1329 "ext/date/lib/parse_date.re"
|
||||
#line 1330 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("gnudateshort");
|
||||
@ -11846,7 +11846,7 @@ yy666:
|
||||
}
|
||||
yy667:
|
||||
YYDEBUG(667, *YYCURSOR);
|
||||
#line 1273 "ext/date/lib/parse_date.re"
|
||||
#line 1274 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("americanshort | american");
|
||||
@ -12094,7 +12094,7 @@ yy700:
|
||||
if (yych <= ':') goto yy704;
|
||||
yy701:
|
||||
YYDEBUG(701, *YYCURSOR);
|
||||
#line 1556 "ext/date/lib/parse_date.re"
|
||||
#line 1557 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int tz_not_found;
|
||||
DEBUG_OUTPUT("clf");
|
||||
@ -12666,7 +12666,7 @@ yy763:
|
||||
}
|
||||
yy764:
|
||||
YYDEBUG(764, *YYCURSOR);
|
||||
#line 1301 "ext/date/lib/parse_date.re"
|
||||
#line 1302 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("iso8601date2");
|
||||
@ -12718,7 +12718,7 @@ yy771:
|
||||
YYDEBUG(771, *YYCURSOR);
|
||||
++YYCURSOR;
|
||||
YYDEBUG(772, *YYCURSOR);
|
||||
#line 1542 "ext/date/lib/parse_date.re"
|
||||
#line 1543 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("pgtextreverse");
|
||||
@ -12869,7 +12869,7 @@ yy783:
|
||||
}
|
||||
yy784:
|
||||
YYDEBUG(784, *YYCURSOR);
|
||||
#line 1577 "ext/date/lib/parse_date.re"
|
||||
#line 1578 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("year4");
|
||||
TIMELIB_INIT;
|
||||
@ -13028,7 +13028,7 @@ yy793:
|
||||
}
|
||||
yy794:
|
||||
YYDEBUG(794, *YYCURSOR);
|
||||
#line 1398 "ext/date/lib/parse_date.re"
|
||||
#line 1399 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("datenodayrev");
|
||||
@ -13256,7 +13256,7 @@ yy814:
|
||||
if (yych <= '7') goto yy817;
|
||||
yy815:
|
||||
YYDEBUG(815, *YYCURSOR);
|
||||
#line 1509 "ext/date/lib/parse_date.re"
|
||||
#line 1510 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
timelib_sll w, d;
|
||||
DEBUG_OUTPUT("isoweek");
|
||||
@ -13284,7 +13284,7 @@ yy817:
|
||||
YYDEBUG(817, *YYCURSOR);
|
||||
++YYCURSOR;
|
||||
YYDEBUG(818, *YYCURSOR);
|
||||
#line 1490 "ext/date/lib/parse_date.re"
|
||||
#line 1491 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
timelib_sll w, d;
|
||||
DEBUG_OUTPUT("isoweekday");
|
||||
@ -13366,7 +13366,7 @@ yy821:
|
||||
}
|
||||
yy822:
|
||||
YYDEBUG(822, *YYCURSOR);
|
||||
#line 1476 "ext/date/lib/parse_date.re"
|
||||
#line 1477 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("pgydotd");
|
||||
@ -13482,7 +13482,7 @@ yy842:
|
||||
++YYCURSOR;
|
||||
yy843:
|
||||
YYDEBUG(843, *YYCURSOR);
|
||||
#line 1450 "ext/date/lib/parse_date.re"
|
||||
#line 1451 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int tz_not_found;
|
||||
DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif");
|
||||
@ -13769,7 +13769,7 @@ yy848:
|
||||
}
|
||||
yy849:
|
||||
YYDEBUG(849, *YYCURSOR);
|
||||
#line 1438 "ext/date/lib/parse_date.re"
|
||||
#line 1439 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("datenocolon");
|
||||
TIMELIB_INIT;
|
||||
@ -14700,7 +14700,7 @@ yy973:
|
||||
if (yych <= '9') goto yy996;
|
||||
yy974:
|
||||
YYDEBUG(974, *YYCURSOR);
|
||||
#line 1315 "ext/date/lib/parse_date.re"
|
||||
#line 1316 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int length = 0;
|
||||
DEBUG_OUTPUT("gnudateshorter");
|
||||
@ -15722,7 +15722,7 @@ yy1066:
|
||||
}
|
||||
yy1068:
|
||||
YYDEBUG(1068, *YYCURSOR);
|
||||
#line 1207 "ext/date/lib/parse_date.re"
|
||||
#line 1208 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("gnunocolon");
|
||||
TIMELIB_INIT;
|
||||
@ -15836,7 +15836,7 @@ yy1075:
|
||||
}
|
||||
yy1076:
|
||||
YYDEBUG(1076, *YYCURSOR);
|
||||
#line 1253 "ext/date/lib/parse_date.re"
|
||||
#line 1254 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
int tz_not_found;
|
||||
DEBUG_OUTPUT("iso8601nocolon");
|
||||
@ -16753,7 +16753,7 @@ yy1117:
|
||||
}
|
||||
yy1118:
|
||||
YYDEBUG(1118, *YYCURSOR);
|
||||
#line 1649 "ext/date/lib/parse_date.re"
|
||||
#line 1650 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
timelib_sll i;
|
||||
int behavior = 0;
|
||||
@ -16820,7 +16820,7 @@ yy1126:
|
||||
YYDEBUG(1126, *YYCURSOR);
|
||||
++YYCURSOR;
|
||||
YYDEBUG(1127, *YYCURSOR);
|
||||
#line 1122 "ext/date/lib/parse_date.re"
|
||||
#line 1123 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
timelib_sll i;
|
||||
int behavior = 0;
|
||||
@ -16949,7 +16949,7 @@ yy1141:
|
||||
}
|
||||
yy1142:
|
||||
YYDEBUG(1142, *YYCURSOR);
|
||||
#line 1625 "ext/date/lib/parse_date.re"
|
||||
#line 1626 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
timelib_sll i;
|
||||
int behavior = 0;
|
||||
@ -19649,7 +19649,7 @@ yy1294:
|
||||
goto yy1298;
|
||||
yy1295:
|
||||
YYDEBUG(1295, *YYCURSOR);
|
||||
#line 1099 "ext/date/lib/parse_date.re"
|
||||
#line 1100 "ext/date/lib/parse_date.re"
|
||||
{
|
||||
DEBUG_OUTPUT("backof | frontof");
|
||||
TIMELIB_INIT;
|
||||
@ -21382,11 +21382,12 @@ yy1387:
|
||||
s->time->is_localtime = 1;
|
||||
s->time->zone_type = TIMELIB_ZONETYPE_OFFSET;
|
||||
s->time->z = 0;
|
||||
s->time->dst = 0;
|
||||
|
||||
TIMELIB_DEINIT;
|
||||
return TIMELIB_RELATIVE;
|
||||
}
|
||||
#line 21390 "ext/date/lib/parse_date.c"
|
||||
#line 21391 "ext/date/lib/parse_date.c"
|
||||
yy1388:
|
||||
YYDEBUG(1388, *YYCURSOR);
|
||||
yych = *++YYCURSOR;
|
||||
@ -21833,7 +21834,7 @@ yy1417:
|
||||
TIMELIB_DEINIT;
|
||||
return TIMELIB_RELATIVE;
|
||||
}
|
||||
#line 21837 "ext/date/lib/parse_date.c"
|
||||
#line 21838 "ext/date/lib/parse_date.c"
|
||||
yy1418:
|
||||
YYDEBUG(1418, *YYCURSOR);
|
||||
yych = *++YYCURSOR;
|
||||
@ -21877,7 +21878,7 @@ yy1420:
|
||||
TIMELIB_DEINIT;
|
||||
return TIMELIB_RELATIVE;
|
||||
}
|
||||
#line 21881 "ext/date/lib/parse_date.c"
|
||||
#line 21882 "ext/date/lib/parse_date.c"
|
||||
yy1421:
|
||||
YYDEBUG(1421, *YYCURSOR);
|
||||
yych = *++YYCURSOR;
|
||||
@ -23897,7 +23898,7 @@ yy1500:
|
||||
TIMELIB_DEINIT;
|
||||
return TIMELIB_RELATIVE;
|
||||
}
|
||||
#line 23901 "ext/date/lib/parse_date.c"
|
||||
#line 23902 "ext/date/lib/parse_date.c"
|
||||
yy1501:
|
||||
YYDEBUG(1501, *YYCURSOR);
|
||||
yych = *++YYCURSOR;
|
||||
@ -24047,7 +24048,7 @@ yy1508:
|
||||
TIMELIB_DEINIT;
|
||||
return TIMELIB_RELATIVE;
|
||||
}
|
||||
#line 24051 "ext/date/lib/parse_date.c"
|
||||
#line 24052 "ext/date/lib/parse_date.c"
|
||||
yy1509:
|
||||
YYDEBUG(1509, *YYCURSOR);
|
||||
yyaccept = 0;
|
||||
@ -24591,7 +24592,7 @@ yy1531:
|
||||
TIMELIB_DEINIT;
|
||||
return TIMELIB_RELATIVE;
|
||||
}
|
||||
#line 24595 "ext/date/lib/parse_date.c"
|
||||
#line 24596 "ext/date/lib/parse_date.c"
|
||||
yy1532:
|
||||
YYDEBUG(1532, *YYCURSOR);
|
||||
yyaccept = 0;
|
||||
@ -24764,7 +24765,7 @@ yy1537:
|
||||
goto yy1531;
|
||||
}
|
||||
}
|
||||
#line 1775 "ext/date/lib/parse_date.re"
|
||||
#line 1776 "ext/date/lib/parse_date.re"
|
||||
|
||||
}
|
||||
|
||||
@ -25070,6 +25071,7 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
|
||||
s->time->is_localtime = 1;
|
||||
s->time->zone_type = TIMELIB_ZONETYPE_OFFSET;
|
||||
s->time->z = 0;
|
||||
s->time->dst = 0;
|
||||
break;
|
||||
|
||||
case 'e': /* timezone */
|
||||
|
@ -1073,6 +1073,7 @@ weekdayof = (reltextnumber|reltexttext) space (dayfull|dayabbr) space 'of
|
||||
s->time->is_localtime = 1;
|
||||
s->time->zone_type = TIMELIB_ZONETYPE_OFFSET;
|
||||
s->time->z = 0;
|
||||
s->time->dst = 0;
|
||||
|
||||
TIMELIB_DEINIT;
|
||||
return TIMELIB_RELATIVE;
|
||||
@ -2077,6 +2078,7 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
|
||||
s->time->is_localtime = 1;
|
||||
s->time->zone_type = TIMELIB_ZONETYPE_OFFSET;
|
||||
s->time->z = 0;
|
||||
s->time->dst = 0;
|
||||
break;
|
||||
|
||||
case 'e': /* timezone */
|
||||
|
16
ext/date/tests/bug62561.phpt
Normal file
16
ext/date/tests/bug62561.phpt
Normal file
@ -0,0 +1,16 @@
|
||||
--TEST--
|
||||
Bug #62561 Unixtimestamp may take on local times DST flag (this test will only be valid during EDT)
|
||||
--FILE--
|
||||
<?php
|
||||
$tz = new DateTimeZone('America/New_York');
|
||||
$ts = new DateTime('@1341115200', $tz);
|
||||
$int = new DateInterval('P1D');
|
||||
$dayFromTs = new DateTime('@1341115200', new DateTimeZone('America/New_York'));
|
||||
$dayFromTs->add($int);
|
||||
|
||||
echo 'ts: '.$ts->format('Y-m-d H:i:s')."\n";
|
||||
echo 'day from ts: '.$dayFromTs->format('Y-m-d H:i:s')."\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
ts: 2012-07-01 04:00:00
|
||||
day from ts: 2012-07-02 04:00:00
|
40
ext/date/tests/bug62896.phpt
Normal file
40
ext/date/tests/bug62896.phpt
Normal file
@ -0,0 +1,40 @@
|
||||
--TEST--
|
||||
Bug #62896 Unixtimestamp may take on local times DST flag (this test will only be valid during CEST)
|
||||
--FILE--
|
||||
<?php
|
||||
$tz = new DateTimeZone('Europe/Berlin');
|
||||
|
||||
echo "FROM TIMESTAMP, NO TZ:\n";
|
||||
|
||||
$date = new DateTime('@'.strtotime('2012-08-22 00:00:00 CEST'));
|
||||
echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n";
|
||||
|
||||
$date->modify('+0 days');
|
||||
echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n";
|
||||
|
||||
echo "FROM TIMESTAMP, WITH TZ:\n";
|
||||
|
||||
$date = new DateTime('@'.strtotime('2012-08-22 00:00:00 CEST'));
|
||||
$date->setTimezone($tz);
|
||||
echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n";
|
||||
|
||||
$date->modify('+0 days');
|
||||
echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n";
|
||||
|
||||
echo "FROM STRING:\n";
|
||||
|
||||
$date = new DateTime('2012-08-22 00:00:00 CEST', $tz);
|
||||
echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n";
|
||||
|
||||
$date->modify('+0 days');
|
||||
echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n";
|
||||
--EXPECT--
|
||||
FROM TIMESTAMP, NO TZ:
|
||||
2012-08-21 22:00:00 GMT+0000 (offset 0)
|
||||
2012-08-21 22:00:00 GMT+0000 (offset 0)
|
||||
FROM TIMESTAMP, WITH TZ:
|
||||
2012-08-22 00:00:00 CEST (offset 7200)
|
||||
2012-08-22 00:00:00 CEST (offset 7200)
|
||||
FROM STRING:
|
||||
2012-08-22 00:00:00 CEST (offset 7200)
|
||||
2012-08-22 00:00:00 CEST (offset 7200)
|
Loading…
Reference in New Issue
Block a user