I think getTransitions
is what you're after:
$timezone = new DateTimeZone("Europe/London");
$transitions = $timezone->getTransitions();
It's a bit of an eyesore to look at, I admit, and if you're confused as to why there are multiple entries returned in the array, it's because the exact date is different because in most regions it's based on the day of the week of a month (such as "last Sunday in October") not a specific date. For the above if you only wanted the upcoming transitions, you would add the timestamp_being argument:
$timezone = new DateTimeZone("Europe/London");
$transitions = $timezone->getTransitions(time());