Jump to content
MakeWebGames

Recommended Posts

Posted

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'); 
}
?>

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...