LordDan Posted June 5, 2010 Posted June 5, 2010 A PHP Class which will generate a HTML select list of Timezones (GMT). It'll then cache the generated list for all future usage. Wrote it some time ago, still use it ^^ timezones.class.php <?php class timezoneUtility { /* listZones( STR, STR ) @Param: Id of the <select> element @Param: Key of the timezone array to preselect (IE: "Europe/London") ------------------------- This function will generate a list of timezones and then cache them for further use. Eg: $timezone->listZones(); */ public function listZones( $elementId = 'timezones', $selected = null ) { if( file_exists( 'cache/timezones.cache.html' ) ) { return '<select name="'. $elementId .'" id="'. $elementId .'" style="font-size: 7pt;">'. file_get_contents( 'display/cache/timezones.cache.html' ) .'</select>'; } else { $zones = $this->getTimezones(); $selected = is_null( $selected ) ? date_default_timezone_get() : $selected; $select = ''; foreach( $zones as $key => $gmt ) { $select .= '<option value="' . $key . '"'; $select .= ( $key == $selected ) ? ' selected="selected"' : ''; $select .= '>' . $gmt . '</option>' . "\r\n"; } file_put_contents( 'cache/timezones.cache.html', $select ); return '<select name="'. $elementId .'" id="'. $elementId .'" style="font-size: 7pt;">'. $select .'</select>'; } } /* isValid( STR ) @Param: The users selected Timezone (Key of the array) ------------------------- This short function validates the users timezone selection. Eg: $timezone->isValid( ... ); */ public function isValid( $selected ) { if( !array_key_exists( $selected, $this->getTimezones() ) ){ return false; } else { return true; } } /* getTimezones(); Simply returns the array of Timezones for use in Generating the list and validating the users Timezone selection.. */ private function getTimezones() { $zones = array( "Pacific/Midway" => "(GMT-11:00) Midway Island, Samoa", "America/Adak" => "(GMT-10:00) Hawaii-Aleutian", "Etc/GMT+10" => "(GMT-10:00) Hawaii", "Pacific/Marquesas" => "(GMT-09:30) Marquesas Islands", "Pacific/Gambier" => "(GMT-09:00) Gambier Islands", "America/Anchorage" => "(GMT-09:00) Alaska", "America/Ensenada" => "(GMT-08:00) Tijuana, Baja California", "Etc/GMT+8" => "(GMT-08:00) Pitcairn Islands", "America/Los_Angeles" => "(GMT-08:00) Pacific Time (US & Canada)", "America/Denver" => "(GMT-07:00) Mountain Time (US & Canada)", "America/Chihuahua" => "(GMT-07:00) Chihuahua, La Paz, Mazatlan", "America/Dawson_Creek" => "(GMT-07:00) Arizona", "America/Belize" => "(GMT-06:00) Saskatchewan, Central America", "America/Cancun" => "(GMT-06:00) Guadalajara, Mexico City, Monterrey", "Chile/EasterIsland" => "(GMT-06:00) Easter Island", "America/Chicago" => "(GMT-06:00) Central Time (US & Canada)", "America/New_York" => "(GMT-05:00) Eastern Time (US & Canada)", "America/Havana" => "(GMT-05:00) Cuba", "America/Bogota" => "(GMT-05:00) Bogota, Lima, Quito, Rio Branco", "America/Caracas" => "(GMT-04:30) Caracas", "America/Santiago" => "(GMT-04:00) Santiago", "America/La_Paz" => "(GMT-04:00) La Paz", "Atlantic/Stanley" => "(GMT-04:00) Faukland Islands", "America/Campo_Grande" => "(GMT-04:00) Brazil", "America/Goose_Bay" => "(GMT-04:00) Atlantic Time (Goose Bay)", "America/Glace_Bay" => "(GMT-04:00) Atlantic Time (Canada)", "America/St_Johns" => "(GMT-03:30) Newfoundland", "America/Araguaina" => "(GMT-03:00) UTC-3", "America/Montevideo" => "(GMT-03:00) Montevideo", "America/Miquelon" => "(GMT-03:00) Miquelon, St. Pierre", "America/Godthab" => "(GMT-03:00) Greenland", "America/Argentina/Buenos_Aires" => "(GMT-03:00) Buenos Aires", "America/Sao_Paulo" => "(GMT-03:00) Brasilia", "America/Noronha" => "(GMT-02:00) Mid-Atlantic", "Atlantic/Cape_Verde" => "(GMT-01:00) Cape Verde Is", "Atlantic/Azores" => "(GMT-01:00) Azores", "Europe/Belfast" => "(GMT) Greenwich Mean Time : Belfast", "Europe/Dublin" => "(GMT) Greenwich Mean Time : Dublin", "Europe/Lisbon" => "(GMT) Greenwich Mean Time : Lisbon", "Europe/London" => "(GMT) Greenwich Mean Time : London", "Africa/Abidjan" => "(GMT) Monrovia, Reykjavik", "Europe/Amsterdam" => "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", "Europe/Belgrade" => "(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", "Europe/Brussels" => "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris", "Africa/Algiers" => "(GMT+01:00) West Central Africa", "Africa/Windhoek" => "(GMT+01:00) Windhoek", "Asia/Beirut" => "(GMT+02:00) Beirut", "Africa/Cairo" => "(GMT+02:00) Cairo", "Asia/Gaza" => "(GMT+02:00) Gaza", "Africa/Blantyre" => "(GMT+02:00) Harare, Pretoria", "Asia/Jerusalem" => "(GMT+02:00) Jerusalem", "Europe/Minsk" => "(GMT+02:00) Minsk", "Asia/Damascus" => "(GMT+02:00) Syria", "Europe/Moscow" => "(GMT+03:00) Moscow, St. Petersburg, Volgograd", "Africa/Addis_Ababa" => "(GMT+03:00) Nairobi", "Asia/Tehran" => "(GMT+03:30) Tehran", "Asia/Dubai" => "(GMT+04:00) Abu Dhabi, Muscat", "Asia/Yerevan" => "(GMT+04:00) Yerevan", "Asia/Kabul" => "(GMT+04:30) Kabul", "Asia/Yekaterinburg" => "(GMT+05:00) Ekaterinburg", "Asia/Tashkent" => "(GMT+05:00) Tashkent", "Asia/Kolkata" => "(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi", "Asia/Katmandu" => "(GMT+05:45) Kathmandu", "Asia/Dhaka" => "(GMT+06:00) Astana, Dhaka", "Asia/Novosibirsk" => "(GMT+06:00) Novosibirsk", "Asia/Rangoon" => "(GMT+06:30) Yangon (Rangoon)", "Asia/Bangkok" => "(GMT+07:00) Bangkok, Hanoi, Jakarta", "Asia/Krasnoyarsk" => "(GMT+07:00) Krasnoyarsk", "Asia/Hong_Kong" => "(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi", "Asia/Irkutsk" => "(GMT+08:00) Irkutsk, Ulaan Bataar", "Australia/Perth" => "(GMT+08:00) Perth", "Australia/Eucla" => "(GMT+08:45) Eucla", "Asia/Tokyo" => "(GMT+09:00) Osaka, Sapporo, Tokyo", "Asia/Seoul" => "(GMT+09:00) Seoul", "Asia/Yakutsk" => "(GMT+09:00) Yakutsk", "Australia/Adelaide" => "(GMT+09:30) Adelaide", "Australia/Darwin" => "(GMT+09:30) Darwin", "Australia/Brisbane" => "(GMT+10:00) Brisbane", "Australia/Hobart" => "(GMT+10:00) Hobart", "Asia/Vladivostok" => "(GMT+10:00) Vladivostok", "Australia/Lord_Howe" => "(GMT+10:30) Lord Howe Island", "Etc/GMT-11" => "(GMT+11:00) Solomon Is, New Caledonia", "Asia/Magadan" => "(GMT+11:00) Magadan", "Pacific/Norfolk" => "(GMT+11:30) Norfolk Island", "Asia/Anadyr" => "(GMT+12:00) Anadyr, Kamchatka", "Pacific/Auckland" => "(GMT+12:00) Auckland, Wellington", "Etc/GMT-12" => "(GMT+12:00) Fiji, Kamchatka, Marshall Is", "Pacific/Chatham" => "(GMT+12:45) Chatham Islands", "Pacific/Tongatapu" => "(GMT+13:00) Nuku'alofa", "Pacific/Kiritimati" => "(GMT+14:00) Kiritimati" ); return $zones; } } ?> Usage: <?php require_once('classes/timezone.class.php'); $timezones = new timezoneUtility; echo $timezones->listZones( 'tzone_select' ); ?> Validating selection: <?php if( !$timezones->isValid( $_POST['tzone_select'] ){ die('Don\'t remember that being an option... 0_o'); } ?> Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.