Root/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | <?php class Pluf_Form_Widget_TimeZoneInput extends Pluf_Form_Widget_Input { public $input_type = 'text' ; public $initial = "" ; public function __construct( $attrs = []) { parent::__construct( $attrs ); } public function render( $name , $value , $extra_attrs = array ()) { return Pluf_Template::markSafe( $this ->getHTML( $name , $value )); } public function getHTML( $name , $value ) { // Based off snippet here: http://stackoverflow.com/a/17355238/195722 static $regions = array ( DateTimeZone::AFRICA, DateTimeZone::AMERICA, DateTimeZone::ANTARCTICA, DateTimeZone::ASIA, DateTimeZone::ATLANTIC, DateTimeZone::AUSTRALIA, DateTimeZone::EUROPE, DateTimeZone::INDIAN, DateTimeZone::PACIFIC, ); $timezones = array (); foreach ( $regions as $region ) { $timezones = array_merge ( $timezones , DateTimeZone::listIdentifiers( $region ) ); } $timezone_offsets = array (); foreach ( $timezones as $timezone ) { $tz = new DateTimeZone( $timezone ); $timezone_offsets [ $timezone ] = $tz ->getOffset( new DateTime); } // sort timezone by timezone name ksort( $timezone_offsets ); $timezone_list = array (); foreach ( $timezone_offsets as $timezone => $offset ) { $offset_prefix = $offset < 0 ? '-' : '+' ; $offset_formatted = gmdate ( 'H:i' , abs ( $offset ) ); $pretty_offset = "UTC${offset_prefix}${offset_formatted}" ; $t = new DateTimeZone( $timezone ); $c = new DateTime(null, $t ); $current_time = $c ->format( 'g:i A' ); $timezone_list [ $timezone ] = "(${pretty_offset}) $timezone - $current_time" ; } $listArray = []; foreach ( $timezone_list as $key => $val ) { if ( $key == $value ) { $listArray [] = "<option selected=\"selected\" value=\"$key\">$val</option>" ; } else { $listArray [] = "<option value=\"$key\">$val</option>" ; } } return "<select name=\"$name\">" . implode( "\n" , $listArray ) . "</select>" ; } } |