public static function names($codes = null, $sort = true)
    {
        $list = [];
        $sortList = [];
        $codes = $codes ?: static::codes();
        foreach ($codes as $code) {
            $intlTimeZone = \IntlTimeZone::createTimeZone($code);
            $name = static::intlName($intlTimeZone);
            if ('(GMT) GMT' != $name) {
                $list[$code] = $name;
                $sortList[$code] = abs($intlTimeZone->getRawOffset());
            }
        }

        if ($sort) {
            array_multisort($sortList, $list);
        }

        return $list;
    }