Change record status: 
Project: 
Introduced in branch: 
8.4.x
Introduced in version: 
8.4.0
Description: 

Before Drupal 8.4, the data structure returned was an array which held translatable markup objects:

  system_time_zones();

Produces:

["Pacific/Tongatapu"]=>
  object(Drupal\Core\StringTranslation\TranslatableMarkup)#4682 (5) {
    ["string":protected]=>
    string(5) "@zone"
    ["translatedMarkup":protected]=>
    NULL
    ["options":protected]=>
    array(0) {
    }
    ["stringTranslation":protected]=>
    NULL
    ["arguments":protected]=>
    array(1) {
      ["@zone"]=>
      object(Drupal\Core\StringTranslation\TranslatableMarkup)#4681 (5) {
        ["string":protected]=>
        string(17) "Pacific/Tongatapu"
        ["translatedMarkup":protected]=>
        NULL
        ["options":protected]=>
        array(0) {
        }
        ["stringTranslation":protected]=>
        NULL
        ["arguments":protected]=>
        array(0) {
        }
      }
    }
  }

After Drupal 8.4, there is an optional override that forces the function to return a nested array structure:

  system_time_zones(NULL, TRUE);
["Pacific"]=>
  array(39) {
    ["Pacific/Apia"]=>
    string(4) "Apia"
    ["Pacific/Auckland"]=>
    string(8) "Auckland"

    ...

    ["Pacific/Tarawa"]=>
    string(6) "Tarawa"
    ["Pacific/Tongatapu"]=>
    string(9) "Tongatapu"
    ["Pacific/Wake"]=>
    string(4) "Wake"
    ["Pacific/Wallis"]=>
    string(6) "Wallis"
  }

This is now the default for installation, administration regional settings and user profile timezone selection.

Impacts: 
Site builders, administrators, editors
Module developers
Updates Done (doc team, etc.)
Online documentation: 
Not done
Theming guide: 
Not done
Module developer documentation: 
Not done
Examples project: 
Not done
Coder Review: 
Not done
Coder Upgrade: 
Not done
Other: 
Other updates done