var tz = require('./').tz; var aliases = { "Africa/Accra": "Africa/Abidjan", "Africa/Bamako": "Africa/Abidjan", "Africa/Banjul": "Africa/Abidjan", "Africa/Bissau": "Africa/Abidjan", "Africa/Conakry": "Africa/Abidjan", "Africa/Dakar": "Africa/Abidjan", "Africa/Freetown": "Africa/Abidjan", "Africa/Lome": "Africa/Abidjan", "Africa/Monrovia": "Africa/Abidjan", "Africa/Nouakchott": "Africa/Abidjan", "Africa/Ouagadougou": "Africa/Abidjan", "Africa/Sao_Tome": "Africa/Abidjan", "Africa/Timbuktu": "Africa/Abidjan", "America/Danmarkshavn": "Africa/Abidjan", "Atlantic/Reykjavik": "Africa/Abidjan", "Atlantic/St_Helena": "Africa/Abidjan", "Etc/GMT": "Africa/Abidjan", "Etc/GMT+0": "Africa/Abidjan", "Etc/GMT-0": "Africa/Abidjan", "Etc/GMT0": "Africa/Abidjan", "Etc/Greenwich": "Africa/Abidjan", "GMT": "Africa/Abidjan", "GMT+0": "Africa/Abidjan", "GMT-0": "Africa/Abidjan", "GMT0": "Africa/Abidjan", "Greenwich": "Africa/Abidjan", "Iceland": "Africa/Abidjan", "Africa/Asmara": "Africa/Addis_Ababa", "Africa/Asmera": "Africa/Addis_Ababa", "Africa/Dar_es_Salaam": "Africa/Addis_Ababa", "Africa/Djibouti": "Africa/Addis_Ababa", "Africa/Juba": "Africa/Addis_Ababa", "Africa/Kampala": "Africa/Addis_Ababa", "Africa/Khartoum": "Africa/Addis_Ababa", "Africa/Mogadishu": "Africa/Addis_Ababa", "Africa/Nairobi": "Africa/Addis_Ababa", "Indian/Antananarivo": "Africa/Addis_Ababa", "Indian/Comoro": "Africa/Addis_Ababa", "Indian/Mayotte": "Africa/Addis_Ababa", "Africa/Tunis": "Africa/Algiers", "Africa/Brazzaville": "Africa/Bangui", "Africa/Douala": "Africa/Bangui", "Africa/Kinshasa": "Africa/Bangui", "Africa/Lagos": "Africa/Bangui", "Africa/Libreville": "Africa/Bangui", "Africa/Luanda": "Africa/Bangui", "Africa/Malabo": "Africa/Bangui", "Africa/Ndjamena": "Africa/Bangui", "Africa/Niamey": "Africa/Bangui", "Africa/Porto-Novo": "Africa/Bangui", "Africa/Bujumbura": "Africa/Blantyre", "Africa/Gaborone": "Africa/Blantyre", "Africa/Harare": "Africa/Blantyre", "Africa/Kigali": "Africa/Blantyre", "Africa/Lubumbashi": "Africa/Blantyre", "Africa/Lusaka": "Africa/Blantyre", "Africa/Maputo": "Africa/Blantyre", "Africa/Tripoli": "Africa/Cairo", "Egypt": "Africa/Cairo", "Europe/Kaliningrad": "Africa/Cairo", "Libya": "Africa/Cairo", "Africa/El_Aaiun": "Africa/Casablanca", "Arctic/Longyearbyen": "Africa/Ceuta", "Atlantic/Jan_Mayen": "Africa/Ceuta", "CET": "Africa/Ceuta", "Europe/Amsterdam": "Africa/Ceuta", "Europe/Andorra": "Africa/Ceuta", "Europe/Belgrade": "Africa/Ceuta", "Europe/Berlin": "Africa/Ceuta", "Europe/Bratislava": "Africa/Ceuta", "Europe/Brussels": "Africa/Ceuta", "Europe/Budapest": "Africa/Ceuta", "Europe/Busingen": "Africa/Ceuta", "Europe/Copenhagen": "Africa/Ceuta", "Europe/Gibraltar": "Africa/Ceuta", "Europe/Ljubljana": "Africa/Ceuta", "Europe/Luxembourg": "Africa/Ceuta", "Europe/Madrid": "Africa/Ceuta", "Europe/Malta": "Africa/Ceuta", "Europe/Monaco": "Africa/Ceuta", "Europe/Oslo": "Africa/Ceuta", "Europe/Paris": "Africa/Ceuta", "Europe/Podgorica": "Africa/Ceuta", "Europe/Prague": "Africa/Ceuta", "Europe/Rome": "Africa/Ceuta", "Europe/San_Marino": "Africa/Ceuta", "Europe/Sarajevo": "Africa/Ceuta", "Europe/Skopje": "Africa/Ceuta", "Europe/Stockholm": "Africa/Ceuta", "Europe/Tirane": "Africa/Ceuta", "Europe/Vaduz": "Africa/Ceuta", "Europe/Vatican": "Africa/Ceuta", "Europe/Vienna": "Africa/Ceuta", "Europe/Warsaw": "Africa/Ceuta", "Europe/Zagreb": "Africa/Ceuta", "Europe/Zurich": "Africa/Ceuta", "Poland": "Africa/Ceuta", "Africa/Maseru": "Africa/Johannesburg", "Africa/Mbabane": "Africa/Johannesburg", "America/Atka": "America/Adak", "US/Aleutian": "America/Adak", "America/Juneau": "America/Anchorage", "America/Nome": "America/Anchorage", "America/Sitka": "America/Anchorage", "America/Yakutat": "America/Anchorage", "US/Alaska": "America/Anchorage", "America/Antigua": "America/Anguilla", "America/Aruba": "America/Anguilla", "America/Barbados": "America/Anguilla", "America/Blanc-Sablon": "America/Anguilla", "America/Curacao": "America/Anguilla", "America/Dominica": "America/Anguilla", "America/Grenada": "America/Anguilla", "America/Guadeloupe": "America/Anguilla", "America/Kralendijk": "America/Anguilla", "America/Lower_Princes": "America/Anguilla", "America/Marigot": "America/Anguilla", "America/Martinique": "America/Anguilla", "America/Montserrat": "America/Anguilla", "America/Port_of_Spain": "America/Anguilla", "America/Puerto_Rico": "America/Anguilla", "America/Santo_Domingo": "America/Anguilla", "America/St_Barthelemy": "America/Anguilla", "America/St_Kitts": "America/Anguilla", "America/St_Lucia": "America/Anguilla", "America/St_Thomas": "America/Anguilla", "America/St_Vincent": "America/Anguilla", "America/Tortola": "America/Anguilla", "America/Virgin": "America/Anguilla", "America/Bahia": "America/Araguaina", "America/Belem": "America/Araguaina", "America/Fortaleza": "America/Araguaina", "America/Maceio": "America/Araguaina", "America/Recife": "America/Araguaina", "America/Santarem": "America/Araguaina", "America/Argentina/Catamarca": "America/Argentina/Buenos_Aires", "America/Argentina/ComodRivadavia": "America/Argentina/Buenos_Aires", "America/Argentina/Cordoba": "America/Argentina/Buenos_Aires", "America/Argentina/Jujuy": "America/Argentina/Buenos_Aires", "America/Argentina/La_Rioja": "America/Argentina/Buenos_Aires", "America/Argentina/Mendoza": "America/Argentina/Buenos_Aires", "America/Argentina/Rio_Gallegos": "America/Argentina/Buenos_Aires", "America/Argentina/Salta": "America/Argentina/Buenos_Aires", "America/Argentina/San_Juan": "America/Argentina/Buenos_Aires", "America/Argentina/San_Luis": "America/Argentina/Buenos_Aires", "America/Argentina/Tucuman": "America/Argentina/Buenos_Aires", "America/Argentina/Ushuaia": "America/Argentina/Buenos_Aires", "America/Buenos_Aires": "America/Argentina/Buenos_Aires", "America/Catamarca": "America/Argentina/Buenos_Aires", "America/Cordoba": "America/Argentina/Buenos_Aires", "America/Jujuy": "America/Argentina/Buenos_Aires", "America/Mendoza": "America/Argentina/Buenos_Aires", "America/Rosario": "America/Argentina/Buenos_Aires", "America/Cayman": "America/Atikokan", "America/Coral_Harbour": "America/Atikokan", "America/Jamaica": "America/Atikokan", "America/Panama": "America/Atikokan", "EST": "America/Atikokan", "Jamaica": "America/Atikokan", "America/Merida": "America/Bahia_Banderas", "America/Mexico_City": "America/Bahia_Banderas", "America/Monterrey": "America/Bahia_Banderas", "Mexico/General": "America/Bahia_Banderas", "America/Costa_Rica": "America/Belize", "America/El_Salvador": "America/Belize", "America/Guatemala": "America/Belize", "America/Managua": "America/Belize", "America/Regina": "America/Belize", "America/Swift_Current": "America/Belize", "America/Tegucigalpa": "America/Belize", "Canada/East-Saskatchewan": "America/Belize", "Canada/Saskatchewan": "America/Belize", "America/Manaus": "America/Boa_Vista", "America/Porto_Velho": "America/Boa_Vista", "Brazil/West": "America/Boa_Vista", "America/Cambridge_Bay": "America/Boise", "America/Denver": "America/Boise", "America/Edmonton": "America/Boise", "America/Inuvik": "America/Boise", "America/Ojinaga": "America/Boise", "America/Shiprock": "America/Boise", "America/Yellowknife": "America/Boise", "Canada/Mountain": "America/Boise", "MST7MDT": "America/Boise", "Navajo": "America/Boise", "US/Mountain": "America/Boise", "America/Cuiaba": "America/Campo_Grande", "America/Indiana/Knox": "America/Chicago", "America/Indiana/Tell_City": "America/Chicago", "America/Knox_IN": "America/Chicago", "America/Matamoros": "America/Chicago", "America/Menominee": "America/Chicago", "America/North_Dakota/Beulah": "America/Chicago", "America/North_Dakota/Center": "America/Chicago", "America/North_Dakota/New_Salem": "America/Chicago", "America/Rainy_River": "America/Chicago", "America/Rankin_Inlet": "America/Chicago", "America/Resolute": "America/Chicago", "America/Winnipeg": "America/Chicago", "CST6CDT": "America/Chicago", "Canada/Central": "America/Chicago", "US/Central": "America/Chicago", "US/Indiana-Starke": "America/Chicago", "America/Mazatlan": "America/Chihuahua", "Mexico/BajaSur": "America/Chihuahua", "America/Dawson_Creek": "America/Creston", "America/Hermosillo": "America/Creston", "America/Phoenix": "America/Creston", "MST": "America/Creston", "US/Arizona": "America/Creston", "America/Ensenada": "America/Dawson", "America/Los_Angeles": "America/Dawson", "America/Tijuana": "America/Dawson", "America/Vancouver": "America/Dawson", "America/Whitehorse": "America/Dawson", "Canada/Pacific": "America/Dawson", "Canada/Yukon": "America/Dawson", "Mexico/BajaNorte": "America/Dawson", "PST8PDT": "America/Dawson", "US/Pacific": "America/Dawson", "US/Pacific-New": "America/Dawson", "America/Fort_Wayne": "America/Detroit", "America/Indiana/Indianapolis": "America/Detroit", "America/Indiana/Marengo": "America/Detroit", "America/Indiana/Petersburg": "America/Detroit", "America/Indiana/Vevay": "America/Detroit", "America/Indiana/Vincennes": "America/Detroit", "America/Indiana/Winamac": "America/Detroit", "America/Indianapolis": "America/Detroit", "America/Iqaluit": "America/Detroit", "America/Kentucky/Louisville": "America/Detroit", "America/Kentucky/Monticello": "America/Detroit", "America/Louisville": "America/Detroit", "America/Montreal": "America/Detroit", "America/Nassau": "America/Detroit", "America/New_York": "America/Detroit", "America/Nipigon": "America/Detroit", "America/Pangnirtung": "America/Detroit", "America/Port-au-Prince": "America/Detroit", "America/Thunder_Bay": "America/Detroit", "America/Toronto": "America/Detroit", "Canada/Eastern": "America/Detroit", "EST5EDT": "America/Detroit", "US/East-Indiana": "America/Detroit", "US/Eastern": "America/Detroit", "US/Michigan": "America/Detroit", "America/Porto_Acre": "America/Eirunepe", "America/Rio_Branco": "America/Eirunepe", "Brazil/Acre": "America/Eirunepe", "America/Goose_Bay": "America/Glace_Bay", "America/Halifax": "America/Glace_Bay", "America/Moncton": "America/Glace_Bay", "America/Thule": "America/Glace_Bay", "Atlantic/Bermuda": "America/Glace_Bay", "Canada/Atlantic": "America/Glace_Bay", "Cuba": "America/Havana", "Pacific/Pitcairn": "America/Metlakatla", "Brazil/DeNoronha": "America/Noronha", "Antarctica/Palmer": "America/Santiago", "Chile/Continental": "America/Santiago", "Brazil/East": "America/Sao_Paulo", "Canada/Newfoundland": "America/St_Johns", "Australia/Perth": "Antarctica/Casey", "Australia/West": "Antarctica/Casey", "Antarctica/South_Pole": "Antarctica/McMurdo", "NZ": "Antarctica/McMurdo", "Pacific/Auckland": "Antarctica/McMurdo", "Asia/Baghdad": "Asia/Aden", "Asia/Bahrain": "Asia/Aden", "Asia/Kuwait": "Asia/Aden", "Asia/Qatar": "Asia/Aden", "Asia/Riyadh": "Asia/Aden", "Asia/Aqtobe": "Asia/Aqtau", "Asia/Ashkhabad": "Asia/Ashgabat", "Asia/Ho_Chi_Minh": "Asia/Bangkok", "Asia/Phnom_Penh": "Asia/Bangkok", "Asia/Saigon": "Asia/Bangkok", "Asia/Vientiane": "Asia/Bangkok", "Asia/Colombo": "Asia/Calcutta", "Asia/Kolkata": "Asia/Calcutta", "Asia/Irkutsk": "Asia/Chita", "Asia/Chungking": "Asia/Chongqing", "Asia/Harbin": "Asia/Chongqing", "Asia/Macao": "Asia/Chongqing", "Asia/Macau": "Asia/Chongqing", "Asia/Shanghai": "Asia/Chongqing", "Asia/Taipei": "Asia/Chongqing", "PRC": "Asia/Chongqing", "ROC": "Asia/Chongqing", "Asia/Dhaka": "Asia/Dacca", "Asia/Muscat": "Asia/Dubai", "Asia/Hebron": "Asia/Gaza", "Hongkong": "Asia/Hong_Kong", "Europe/Istanbul": "Asia/Istanbul", "Turkey": "Asia/Istanbul", "Asia/Pontianak": "Asia/Jakarta", "Asia/Tel_Aviv": "Asia/Jerusalem", "Israel": "Asia/Jerusalem", "Asia/Urumqi": "Asia/Kashgar", "Asia/Katmandu": "Asia/Kathmandu", "Asia/Yakutsk": "Asia/Khandyga", "Asia/Novokuznetsk": "Asia/Krasnoyarsk", "Asia/Kuching": "Asia/Kuala_Lumpur", "Asia/Ujung_Pandang": "Asia/Makassar", "EET": "Asia/Nicosia", "Europe/Athens": "Asia/Nicosia", "Europe/Bucharest": "Asia/Nicosia", "Europe/Helsinki": "Asia/Nicosia", "Europe/Kiev": "Asia/Nicosia", "Europe/Mariehamn": "Asia/Nicosia", "Europe/Nicosia": "Asia/Nicosia", "Europe/Riga": "Asia/Nicosia", "Europe/Sofia": "Asia/Nicosia", "Europe/Tallinn": "Asia/Nicosia", "Europe/Uzhgorod": "Asia/Nicosia", "Europe/Vilnius": "Asia/Nicosia", "Europe/Zaporozhye": "Asia/Nicosia", "Asia/Tashkent": "Asia/Samarkand", "ROK": "Asia/Seoul", "Singapore": "Asia/Singapore", "Iran": "Asia/Tehran", "Asia/Thimphu": "Asia/Thimbu", "Japan": "Asia/Tokyo", "Asia/Ulan_Bator": "Asia/Ulaanbaatar", "Asia/Vladivostok": "Asia/Ust-Nera", "Atlantic/Faeroe": "Atlantic/Canary", "Atlantic/Faroe": "Atlantic/Canary", "Atlantic/Madeira": "Atlantic/Canary", "Europe/Lisbon": "Atlantic/Canary", "Portugal": "Atlantic/Canary", "WET": "Atlantic/Canary", "Australia/Canberra": "Australia/ACT", "Australia/Currie": "Australia/ACT", "Australia/Hobart": "Australia/ACT", "Australia/Melbourne": "Australia/ACT", "Australia/NSW": "Australia/ACT", "Australia/Sydney": "Australia/ACT", "Australia/Tasmania": "Australia/ACT", "Australia/Victoria": "Australia/ACT", "Australia/Broken_Hill": "Australia/Adelaide", "Australia/South": "Australia/Adelaide", "Australia/Yancowinna": "Australia/Adelaide", "Australia/Lindeman": "Australia/Brisbane", "Australia/Queensland": "Australia/Brisbane", "Australia/North": "Australia/Darwin", "Australia/Lord_Howe": "Australia/LHI", "Pacific/Easter": "Chile/EasterIsland", "Europe/Dublin": "Eire", "UCT": "Etc/UCT", "Etc/Universal": "Etc/UTC", "Etc/Zulu": "Etc/UTC", "UTC": "Etc/UTC", "Universal": "Etc/UTC", "Zulu": "Etc/UTC", "Europe/Guernsey": "Europe/Belfast", "Europe/Isle_of_Man": "Europe/Belfast", "Europe/Jersey": "Europe/Belfast", "Europe/London": "Europe/Belfast", "GB": "Europe/Belfast", "GB-Eire": "Europe/Belfast", "Europe/Tiraspol": "Europe/Chisinau", "Europe/Moscow": "Europe/Minsk", "Europe/Simferopol": "Europe/Minsk", "Europe/Volgograd": "Europe/Minsk", "W-SU": "Europe/Minsk", "Pacific/Honolulu": "HST", "Pacific/Johnston": "HST", "US/Hawaii": "HST", "Pacific/Kwajalein": "Kwajalein", "Pacific/Majuro": "Kwajalein", "Pacific/Chatham": "NZ-CHAT", "Pacific/Truk": "Pacific/Chuuk", "Pacific/Yap": "Pacific/Chuuk", "Pacific/Saipan": "Pacific/Guam", "Pacific/Pago_Pago": "Pacific/Midway", "Pacific/Samoa": "Pacific/Midway", "US/Samoa": "Pacific/Midway", "Pacific/Ponape": "Pacific/Pohnpei" }; var good = /^(America|Pacific|Asia|Africa|Europe|Australia|Indian|Antarctica)\//; var groups = {}; tz.names().forEach(function (name) { var jan = tz([2015, 0, 1], name).format('Z'); var jul = tz([2015, 6, 1], name).format('Z'); var alias = aliases[name] || name; var key = jan === jul ? jan + ' ' : jan + ' ' + jul; var zone = tz.zone(name); var janIndex = zone._index(new Date(2015, 0, 1)); var julIndex = zone._index(new Date(2015, 6, 1)); var janUntil = zone.untils[Math.min(zone.untils.length - 1, janIndex)]; var julUntil = zone.untils[Math.min(zone.untils.length - 1, julIndex)]; janUntil = tz(janUntil === Infinity ? 0 : janUntil, name); julUntil = tz(julUntil === Infinity ? 0 : julUntil, name); if (jan !== jul) { key += ' | ' + janUntil.format('MMM DD HH:mm') + ' ' + julUntil.format('MMM DD HH:mm'); key += ' | ' + janUntil.format('z') + ' ' + julUntil.format('z'); } else { key += ' | '; key += ' | ' + janUntil.format('z') + ' '; } key += '%' + alias; if (!good.test(name)) { return; } var group = groups[key] = groups[key] || []; group.push(name); }); Object.keys(groups).sort().forEach(function (key) { console.log(key.split('%')[0] + ' | ' + groups[key].join(' ')); // console.log('\n' + key); // console.log('good : ' + groups[key].good.join(' ')); // console.log('bad : ' + groups[key].bad.join(' ')); // console.log('good : ' + groups[key].good.length); // console.log('bad : ' + groups[key].bad.length); });