diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 1878b9106fa..f5c4730ed17 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -623,6 +623,11 @@ PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt) case 7: /* break intentionally missing */ case 6: + if (yea >= 0 && yea < 70) { + yea += 2000; + } else if (yea >= 70 && yea <= 100) { + yea += 1900; + } now->y = yea; /* break intentionally missing again */ case 5: diff --git a/ext/date/tests/mktime-3.phpt b/ext/date/tests/mktime-3.phpt new file mode 100644 index 00000000000..d4ccfbabe47 --- /dev/null +++ b/ext/date/tests/mktime-3.phpt @@ -0,0 +1,52 @@ +--TEST-- +mktime() [3] +--INI-- +error_reporting=2047 +--FILE-- + +--EXPECT-- +America/Toronto +Y: 0 - January 2000-01-01T01:01:01-0500 +Y: 69 - out of range +Y: 70 - January 1970-01-01T01:01:01-0500 +Y: 71 - January 1971-01-01T01:01:01-0500 +Y: 99 - January 1999-01-01T01:01:01-0500 +Y: 100 - January 2000-01-01T01:01:01-0500 +Y: 1900 - out of range +Y: 1901 - out of range +Y: 1902 - January 1902-01-01T01:01:01-0500 +Y: 1999 - January 1999-01-01T01:01:01-0500 +Y: 2000 - January 2000-01-01T01:01:01-0500 +Y: 2001 - January 2001-01-01T01:01:01-0500 + +Europe/Oslo +Y: 0 - January 2000-01-01T01:01:01+0100 +Y: 69 - out of range +Y: 70 - January 1970-01-01T01:01:01+0100 +Y: 71 - January 1971-01-01T01:01:01+0100 +Y: 99 - January 1999-01-01T01:01:01+0100 +Y: 100 - January 2000-01-01T01:01:01+0100 +Y: 1900 - out of range +Y: 1901 - out of range +Y: 1902 - January 1902-01-01T01:01:01+0100 +Y: 1999 - January 1999-01-01T01:01:01+0100 +Y: 2000 - January 2000-01-01T01:01:01+0100 +Y: 2001 - January 2001-01-01T01:01:01+0100