selectATimezone

10 09 2009

No me molestare en presentar funciones para trabajar con las fechas (no solo estoy perdido, otros ya han hecho excelentes trabajos).
Usando un script de php.net, junto a unas lineas de ese articulo, puedes dar a escoger en un formulario todas las zonas horarias, y ver que hora es la seleccionada :

<?php
if(isset($_POST['edited_user_timezone'])){//POST, GET, lo que tu prefieras
	$default = $_POST['edited_user_timezone'];
} else {
	$default = "America/Lima";
}
$defaultcity = end(explode('/',$default));	
date_default_timezone_set($default);
$meses = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","octubre","Noviembre","Diciembre");
$mes = date("n");//lo usaremos para colocar el mes en español
$dia = date("d");
$momento = $dia . " de " . $meses[$mes-1] . " del " . date("Y");
$hora = date('H:i:s');
echo '<div class="tzpreview">La hora en ' . str_replace('_',' ',$defaultcity) . ' ' . $hora . " del " .  $momento .'</div>';
?>

<form name="timezones" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">

<?php
function get_tz_options($selectedzone, $label, $desc = '')
{
  echo '<div class="label"><label for="edited_user_timezone">'.$label.':</label></div>';
  echo '<div class="input"><select name="edited_user_timezone">';
  function timezonechoice($selectedzone) {
    $all = timezone_identifiers_list();

    $i = 0;
    foreach($all AS $zone) {
      $zone = explode('/',$zone);
      $zonen[$i]['continent'] = isset($zone[0]) ? $zone[0] : '';
      $zonen[$i]['city'] = isset($zone[1]) ? $zone[1] : '';
      $zonen[$i]['subcity'] = isset($zone[2]) ? $zone[2] : '';
      $i++;
    }

    asort($zonen);
    $structure = '';
    foreach($zonen AS $zone) {
      extract($zone);
      if($continent == 'Africa' || $continent == 'America' || $continent == 'Antarctica' || $continent == 'Arctic' || $continent == 'Asia' || $continent == 'Atlantic' || $continent == 'Australia' || $continent == 'Europe' || $continent == 'Indian' || $continent == 'Pacific') {
        if(!isset($selectcontinent)) {
          $structure .= '<optgroup label="'.$continent.'">'; // continent
        } elseif($selectcontinent != $continent) {
          $structure .= '</optgroup><optgroup label="'.$continent.'">'; // continent
        }

        if(isset($city) != ''){
          if (!empty($subcity) != ''){
            $city = $city . '/'. $subcity;
          }
          $structure .= "<option ".((($continent.'/'.$city)==$selectedzone)?'selected="selected "':'')." value=\"".($continent.'/'.$city)."\">".str_replace('_',' ',$city)."</option>"; //Timezone
        } else {
          if (!empty($subcity) != ''){
            $city = $city . '/'. $subcity;
          }
          $structure .= "<option ".(($continent==$selectedzone)?'selected="selected "':'')." value=\"".$continent."\">".$continent."</option>"; //Timezone
        }

        $selectcontinent = $continent;
      }
    }
    $structure .= '</optgroup>';
    return $structure;
  }
  echo timezonechoice($selectedzone);
  echo '</select>';
  echo '<span class="notes"> '.$desc.' </span></div>';
}
get_tz_options($default,'Escoje una zona','');//Esta parte ni borrarla
?>
<input type="submit" value="ver">
</form>
?>

Puedes verlo funcionando aquí.

(Se que se ve horrible y que puede ser html no valido, pero lo que debe destacar es la parte que genera la lista, rescatándola para usar en otros formularios (quizá mediante include))

Anuncios

Acciones

Information

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: