Jump to content
MakeWebGames

PHP: Quick and Easy Timezone class


LordDan

Recommended Posts

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'); 
}
?>
Link to comment
Share on other sites

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...