Category
stdlib · php-src-strict · ext/intl IntlTimeZone catalog / identity API
Problem
After #6151 / #20769, VM (PROFILE=8.4) has a usable IntlTimeZone core (createTimeZone, createDefault, getGMT, getID, getOffset, getRawOffset, getDisplayName, getDSTSavings, getCanonicalID, getRegion, hasSameRules, toDateTimeZone, useDaylightTime). Sibling #20824 already tracks countEquivalentIDs / getEquivalentID / getTZDataVersion / getWindowsID.
Separately, php-src still exposes static catalog / sentinel helpers and Windows↔Olson reverse mapping that remain undefined — do not duplicate #20824.
| Repro |
Zend (intl) |
VM PROFILE=8.4 (2026-07-19) |
method_exists('IntlTimeZone', 'getGMT') / createTimeZone |
true |
true |
method_exists('IntlTimeZone', 'getUnknown') |
true |
false |
method_exists('IntlTimeZone', 'getUTC') |
true (PHP 8.4+) |
false |
method_exists('IntlTimeZone', 'createEnumeration') / createTimeZoneIDEnumeration |
true |
false |
method_exists('IntlTimeZone', 'getIDForWindowsID') |
true |
false |
method_exists('IntlTimeZone', 'getErrorCode') / getErrorMessage |
true |
false |
countEquivalentIDs / getWindowsID / … |
tracked in #20824 |
— |
php-src reference
PHP implementation target
Repro
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
cat > /tmp/tz_catalog_gap.php << "PHP"
<?php
foreach (["getGMT","getUnknown","getUTC","createEnumeration","createTimeZoneIDEnumeration","getIDForWindowsID","getErrorCode","getErrorMessage","countEquivalentIDs","getWindowsID"] as $m) {
echo "$m=" . (method_exists("IntlTimeZone", $m) ? "yes" : "no") . "\n";
}
PHP
PHP_COMPILER_PROFILE=8.4 php bin/vm.php /tmp/tz_catalog_gap.php'
Observed (2026-07-19):
getGMT=yes
getUnknown=no
getUTC=no
createEnumeration=no
createTimeZoneIDEnumeration=no
getIDForWindowsID=no
getErrorCode=no
getErrorMessage=no
countEquivalentIDs=no
getWindowsID=no
(countEquivalentIDs/getWindowsID → #20824)
Done when
Category
stdlib· php-src-strict · ext/intl IntlTimeZone catalog / identity APIProblem
After #6151 / #20769, VM (
PROFILE=8.4) has a usable IntlTimeZone core (createTimeZone,createDefault,getGMT,getID,getOffset,getRawOffset,getDisplayName,getDSTSavings,getCanonicalID,getRegion,hasSameRules,toDateTimeZone,useDaylightTime). Sibling #20824 already trackscountEquivalentIDs/getEquivalentID/getTZDataVersion/getWindowsID.Separately, php-src still exposes static catalog / sentinel helpers and Windows↔Olson reverse mapping that remain undefined — do not duplicate #20824.
PROFILE=8.4(2026-07-19)method_exists('IntlTimeZone', 'getGMT')/createTimeZonetruetruemethod_exists('IntlTimeZone', 'getUnknown')truefalsemethod_exists('IntlTimeZone', 'getUTC')true(PHP 8.4+)falsemethod_exists('IntlTimeZone', 'createEnumeration')/createTimeZoneIDEnumerationtruefalsemethod_exists('IntlTimeZone', 'getIDForWindowsID')truefalsemethod_exists('IntlTimeZone', 'getErrorCode')/getErrorMessagetruefalsecountEquivalentIDs/getWindowsID/ …php-src reference
ext/intl/timezone/timezone.stub.phpext/intl/timezone/timezone_methods.cpp—getUnknown,getUTC,createEnumeration,getIDForWindowsID, error gettersPHP implementation target
ext/intl/VmIntlTimeZone.phpmethod registration (same pattern asgetGMT/createDefault)getUnknown/getUTC: return sentinel zone objects (ICUEtc/Unknown/UTC)createEnumeration/createTimeZoneIDEnumeration: return iterable/array of IDs consistent with available zone catalog already used bycreateTimeZonegetIDForWindowsID: Windows→Olson map (subset OK if documented); pair with Stdlib: IntlTimeZone::countEquivalentIDs()/getEquivalentID()/getTZDataVersion()/getWindowsID() missing after #20769 (ext/intl/timezone) #20824getWindowsIDwhen both landIntlError— no new C inruntime/Repro
Observed (2026-07-19):
(
countEquivalentIDs/getWindowsID→ #20824)Done when
getUnknown/getUTCreturn usable IntlTimeZone objects;createEnumerationyields IDs;getIDForWindowsIDmatches Zend for common Windows IDs (or documented subset)test/compliance/cases/intl/runtime/