viernes, 25 de abril de 2014

Zonas horarias en PHP

Script PHP para sacar un menú donde poder elegir la zona horaria deseada.
Otras de las grandes necesidades originadas por la distancia entre diferentes países y en algunos casos ciudades es la hora.
Por ejemplo: ¿Si un usuario se encuentra en cualquier parte del mundo, como hacer para que cuando emita una opinión, esta aparezca con su hora local ó de su zona horaria?
Para solucionar este gran problema y tantos otros relacionados con este género utilizaremos las zonas horarias de las principales ciudades del mundo.
Utilizaremos dos aspectos cruciales o decisivos la hora con respecto al meridiano de la ciudad local utilizada como base para calcular la diferencia con respecto a la ciudad distante tomando como referencia la hora del Meridiano de Greenwich u hora 0 (CERO).
Veamos el código fuente y luego la explicación como de costumbre:
<?
if(isset($_POST[hora])){
settype ($_POST[hora],”integer”);
settype ($_POST[min],”integer”);
settype ($_POST[seg],”integer”);
if($_POST[hora]<=0 OR $_POST[hora]>12){
echo ‘<strong> Hora incorrecta </strong>’;
}elseif($_POST[min]<=0OR $_POST[min]>60){
echo ‘<strong> Minutos incorrectos </strong>’;
}elseif($_POST[seg]<=0 OR $_POST[seg]>60){
echo ‘<strong> Segundos Incorrectos </strong>’;
}else{
$hor=$_POST[hora];
if($_POST[tm]==’pm’ && $_POST[hora]>=1 && $_POST[hora]<12){
$_POST[hora]+=12;
}
$total_minutos_=floor($_POST[hora]*60)+$_POST[min];
$dia=”del mismo día”;
if($_POST[ciudad1]>=0){ // es positiva la zona h
$gmt= (int) $total_minutos_-$_POST[ciudad1];
}else{ // es negativo
$_POST[ciudad1]= (int) $_POST[ciudad1]*-1;
$gmt= $total_minutos_+$_POST[ciudad1];
}
if($gmt<0){
$dia=’ del día anterior’;
$gmt+=1440; //minutos de 1 dia
}
if($_POST[ciudad2]>0){
$tiempo2=$_POST[ciudad2]+$total_minutos_;
}else{
$tiempo2=$_POST[ciudad2]+$gmt;
if($tiempo2 > 1440)
{
$dia = “del dia siguiente”;
$tiempo2-= 1440;
}
if ($tiempo2 < 0)
{
$dia = “del dia anterior”;
$tiempo2 += 1440;
}
}
$hora_de_la_otra_ciudad=floor($tiempo2/60);
echo ‘En la otra ciudad son: ‘.$hora_de_la_otra_ciudad.’ : ‘.$_POST[min].’ : ‘.$_POST[seg].’ ‘.$dia;
}
} ?>
<form action=”<? echo $PHP_SELF?>” method=”post”>Si en mi pc son las
<input name=”hora” type=”text” id=”hora” value=”<? echo $hor?>” size=”2″ maxlength=”2″>
:
<input name=”min” type=”text” id=”min” value=”<? echo $_POST["min"] ?>” size=”2″ maxlength=”2″>
:
<input name=”seg” type=”text” id=”seg” value=”<? echo $_POST["seg"] ?>” size=”2″ maxlength=”2″>
<select name=”tm” id=”tm”>
<option value=”am”>am</option>
<option value=”pm”>pm</option>
</select>
: y estoy en :
<SELECT name=ciudad1 size=1 id=”ciudad1″>
<OPTION value=180>Addis Ababa</OPTION>
<OPTION value=570>Adelaida</OPTION>
<OPTION value=180>Aden</OPTION>
<OPTION value=-360>Aklavik</OPTION>
<OPTION value=60>Argel</OPTION>
<OPTION value=120>Amman</OPTION>
<OPTION value=60>Amsterdam</OPTION>
<OPTION value=720>Anadyr</OPTION>
<OPTION value=120>Ankara</OPTION>
<OPTION value=180>Antananarivo</OPTION>
<OPTION value=-240>Asunció</OPTION>
<OPTION value=120>Atenas</OPTION>
<OPTION value=-300>Atlanta</OPTION>
<OPTION value=-360>Austin</OPTION>
<OPTION value=0>Azores</OPTION>
<OPTION value=180>Baghdad</OPTION>
<OPTION value=420>Bangkok</OPTION>
<OPTION value=60>Barcelona</OPTION>
<OPTION value=180>Beirut</OPTION>
<OPTION value=60>Belgrado</OPTION>
<OPTION value=60>Berlín</OPTION>
<OPTION value=-240>Bermuda</OPTION>
<OPTION value=60>Berna</OPTION>
<OPTION value=120>Biel</OPTION>
<OPTION value=-300>Bogotá</OPTION>
<OPTION value=-300>Boston</OPTION>
<OPTION value=-180>Brasilia</OPTION>
<OPTION value=600>Brisbane</OPTION>
<OPTION value=60>Bruselas</OPTION>
<OPTION value=120>Bucarest</OPTION>
<OPTION value=60>Budapest</OPTION>
<OPTION value=-180>Buenos Aires</OPTION>
<OPTION value=330>Calcuta</OPTION>
<OPTION value=-240 selected>Caracas</OPTION>
<OPTION value=0>Casablanca</OPTION>
<OPTION value=-300>Chicago</OPTION>
<OPTION value=120>Ciudad del Cabo</OPTION>
<OPTION value=60>Copenhague</OPTION>
<OPTION value=-360>Dallas</OPTION>
<OPTION value=180>Dar es Salaam</OPTION>
<OPTION value=570>Darwin</OPTION>
<OPTION value=-420>Denver</OPTION>
<OPTION value=-300>Detroit</OPTION>
<OPTION value=360>Dhaka</OPTION>
<OPTION value=0>Dublín</OPTION>
<OPTION value=-420>Edmonton</OPTION>
<OPTION value=120>Estambul</OPTION>
<OPTION value=60>Estocolmo</OPTION>
<OPTION value=180>El Cairo</OPTION>
<OPTION value=60>Francfort</OPTION>
<OPTION value=60>Ginebra</OPTION>
<OPTION value=-360>Guatemala</OPTION>
<OPTION value=420>Hanoi</OPTION>
<OPTION value=120>Harare</OPTION>
<OPTION value=120>Helsinki</OPTION>
<OPTION value=420>Ho Chi Minh City</OPTION>
<OPTION value=480>Hong Kong</OPTION>
<OPTION value=600>Honolulú</OPTION>
<OPTION value=-360>Houston</OPTION>
<OPTION value=-300>Indianápolis</OPTION>
<OPTION value=300>Islamabad</OPTION>
<OPTION value=420>Jakarta</OPTION>
<OPTION value=120>Jerusalén</OPTION>
<OPTION value=120>Johanesburgo</OPTION>
<OPTION value=270>Kabúl</OPTION>
<OPTION value=720>Kamchatka</OPTION>
<OPTION value=300>Kathmandú</OPTION>
<OPTION value=120>Khartoum</OPTION>
<OPTION value=120>Kigali</OPTION>
<OPTION value=-300>Kingston</OPTION>
<OPTION value=480>Kuala Lumpur</OPTION>
<OPTION value=180>Kuwait</OPTION>
<OPTION value=-240>La Habana</OPTION>
<OPTION value=-240>La Paz</OPTION>
<OPTION value=0>Las Palmas</OPTION>
<OPTION value=60>Lagos</OPTION>
<OPTION value=-300>Lima</OPTION>
<OPTION value=0>Lisboa</OPTION>
<OPTION value=0>Londres</OPTION>
<OPTION value=-480>Los Ángeles</OPTION>
<OPTION value=60>Madrid</OPTION>
<OPTION value=-360>Managua</OPTION>
<OPTION value=480>Manila</OPTION>
<OPTION value=240>Masqat</OPTION>
<OPTION value=600>Melburne</OPTION>
<OPTION value=-360>Méjico D.F.</OPTION>
<OPTION value=300>Miami</OPTION>
<OPTION value=60>Milán</OPTION>
<OPTION value=-360>Minneápolis</OPTION>
<OPTION value=-180>Montevideo</OPTION>
<OPTION value=-300>Montreal</OPTION>
<OPTION value=180>Moscú</OPTION>
<OPTION value=330>Mumbai</OPTION>
<OPTION value=60>Múnich</OPTION>
<OPTION value=180>Nairobi</OPTION>
<OPTION value=60>Nápoles</OPTION>
<OPTION value=-300>Nassau</OPTION>
<OPTION value=330>Nueva Delhi</OPTION>
<OPTION value=-360>Nueva Orleans</OPTION>
<OPTION value=-300>Nueva York</OPTION>
<OPTION value=60>Oslo</OPTION>
<OPTION value=-240>Ottawa</OPTION>
<OPTION value=60>París</OPTION>
<OPTION value=480>Pequín</OPTION>
<OPTION value=480>Perth</OPTION>
<OPTION value=-420>Phoenix</OPTION>
<OPTION value=420>Phnom Penh</OPTION>
<OPTION value=60>Praga</OPTION>
<OPTION value=540>Pyongyang</OPTION>
<OPTION value=0>Reikiavik</OPTION>
<OPTION value=-180>Río de Janeiro</OPTION>
<OPTION value=180>Riyadh</OPTION>
<OPTION value=60>Roma</OPTION>
<OPTION value=-240>St. John’s</OPTION>
<OPTION value=-360>St. Paul</OPTION>
<OPTION value=-480>San Francisco</OPTION>
<OPTION value=-240>San Juan</OPTION>
<OPTION value=-360>San Salvador</OPTION>
<OPTION value=-300>Santo Domingo</OPTION>
<OPTION value=-240>Santiago</OPTION>
<OPTION value=-180>Sao Paulo</OPTION>
<OPTION value=-480>Seattle</OPTION>
<OPTION value=540>Seúl</OPTION>
<OPTION value=480>Shanghai</OPTION>
<OPTION value=480>Singapur</OPTION>
<OPTION value=60>Sofía</OPTION>
<OPTION value=720>Suva</OPTION>
<OPTION value=600>Sydney</OPTION>
<OPTION value=480>Taipei</OPTION>
<OPTION value=120>Tallinn</OPTION>
<OPTION value=300>Tashkent</OPTION>
<OPTION value=-210>Teherán</OPTION>
<OPTION value=540>Tokio</OPTION>
<OPTION value=-300>Toronto</OPTION>
<OPTION value=60>Turín</OPTION>
<OPTION value=-300>Vancúver</OPTION>
<OPTION value=60>Varsovia</OPTION>
<OPTION value=60>Venecia</OPTION>
<OPTION value=60>Viena</OPTION>
<OPTION value=600>Vladivostok</OPTION>
<OPTION value=-300>Washington</OPTION>
<OPTION value=720>Wellington</OPTION>
<OPTION value=-360>Winnipeg</OPTION>
<OPTION value=390>Yangon</OPTION>
<OPTION value=60>Zagreb</OPTION>
<OPTION value=60>Zurich</OPTION>
</SELECT>
<br>
Entonces en
<SELECT name=ciudad2 size=1 id=”ciudad2″>
<OPTION value=180>Addis Ababa</OPTION>
<OPTION value=570>Adelaida</OPTION>
<OPTION value=180>Aden</OPTION>
<OPTION value=-360>Aklavik</OPTION>
<OPTION value=60>Argel</OPTION>
<OPTION value=120>Amman</OPTION>
<OPTION value=60>Amsterdam</OPTION>
<OPTION value=720>Anadyr</OPTION>
<OPTION value=120>Ankara</OPTION>
<OPTION value=180>Antananarivo</OPTION>
<OPTION value=-240>Asunció</OPTION>
<OPTION value=120>Atenas</OPTION>
<OPTION value=-300>Atlanta</OPTION>
<OPTION value=-360>Austin</OPTION>
<OPTION value=0>Azores</OPTION>
<OPTION value=180>Baghdad</OPTION>
<OPTION value=420>Bangkok</OPTION>
<OPTION value=60>Barcelona</OPTION>
<OPTION value=180>Beirut</OPTION>
<OPTION value=60>Belgrado</OPTION>
<OPTION value=60>Berlín</OPTION>
<OPTION value=-240>Bermuda</OPTION>
<OPTION value=60>Berna</OPTION>
<OPTION value=120>Biel</OPTION>
<OPTION value=-300>Bogotá</OPTION>
<OPTION value=-300>Boston</OPTION>
<OPTION value=-180>Brasilia</OPTION>
<OPTION value=600>Brisbane</OPTION>
<OPTION value=60>Bruselas</OPTION>
<OPTION value=120>Bucarest</OPTION>
<OPTION value=60>Budapest</OPTION>
<OPTION value=-180>Buenos Aires</OPTION>
<OPTION value=330>Calcuta</OPTION>
<OPTION value=-240>Caracas</OPTION>
<OPTION value=0>Casablanca</OPTION>
<OPTION value=-300>Chicago</OPTION>
<OPTION value=120>Ciudad del Cabo</OPTION>
<OPTION value=60>Copenhague</OPTION>
<OPTION value=-360>Dallas</OPTION>
<OPTION value=180>Dar es Salaam</OPTION>
<OPTION value=570>Darwin</OPTION>
<OPTION value=-420>Denver</OPTION>
<OPTION value=-300>Detroit</OPTION>
<OPTION value=360>Dhaka</OPTION>
<OPTION value=0>Dublín</OPTION>
<OPTION value=-420>Edmonton</OPTION>
<OPTION value=120>Estambul</OPTION>
<OPTION value=60>Estocolmo</OPTION>
<OPTION value=180>El Cairo</OPTION>
<OPTION value=60>Francfort</OPTION>
<OPTION value=60>Ginebra</OPTION>
<OPTION value=-360>Guatemala</OPTION>
<OPTION value=420>Hanoi</OPTION>
<OPTION value=120>Harare</OPTION>
<OPTION value=120>Helsinki</OPTION>
<OPTION value=420>Ho Chi Minh City</OPTION>
<OPTION value=480>Hong Kong</OPTION>
<OPTION value=600>Honolulú</OPTION>
<OPTION value=-360>Houston</OPTION>
<OPTION value=-300>Indianápolis</OPTION>
<OPTION value=300>Islamabad</OPTION>
<OPTION value=420>Jakarta</OPTION>
<OPTION value=120>Jerusalén</OPTION>
<OPTION value=120>Johanesburgo</OPTION>
<OPTION value=270>Kabúl</OPTION>
<OPTION value=720>Kamchatka</OPTION>
<OPTION value=300>Kathmandú</OPTION>
<OPTION value=120>Khartoum</OPTION>
<OPTION value=120>Kigali</OPTION>
<OPTION value=-300>Kingston</OPTION>
<OPTION value=480>Kuala Lumpur</OPTION>
<OPTION value=180>Kuwait</OPTION>
<OPTION value=-240>La Habana</OPTION>
<OPTION value=-240>La Paz</OPTION>
<OPTION value=0>Las Palmas</OPTION>
<OPTION value=60>Lagos</OPTION>
<OPTION value=-300>Lima</OPTION>
<OPTION value=0>Lisboa</OPTION>
<OPTION value=0>Londres</OPTION>
<OPTION value=-480>Los Ángeles</OPTION>
<OPTION value=60>Madrid</OPTION>
<OPTION value=-360>Managua</OPTION>
<OPTION value=480>Manila</OPTION>
<OPTION value=240>Masqat</OPTION>
<OPTION value=600>Melburne</OPTION>
<OPTION value=-360>Méjico D.F.</OPTION>
<OPTION value=300>Miami</OPTION>
<OPTION value=60>Milán</OPTION>
<OPTION value=-360>Minneápolis</OPTION>
<OPTION value=-180>Montevideo</OPTION>
<OPTION value=-300>Montreal</OPTION>
<OPTION value=180>Moscú</OPTION>
<OPTION value=330>Mumbai</OPTION>
<OPTION value=60>Múnich</OPTION>
<OPTION value=180>Nairobi</OPTION>
<OPTION value=60>Nápoles</OPTION>
<OPTION value=-300>Nassau</OPTION>
<OPTION value=330>Nueva Delhi</OPTION>
<OPTION value=-360>Nueva Orleans</OPTION>
<OPTION value=-300>Nueva York</OPTION>
<OPTION value=60>Oslo</OPTION>
<OPTION value=-240>Ottawa</OPTION>
<OPTION value=60>París</OPTION>
<OPTION value=480>Pequín</OPTION>
<OPTION value=480>Perth</OPTION>
<OPTION value=-420>Phoenix</OPTION>
<OPTION value=420>Phnom Penh</OPTION>
<OPTION value=60>Praga</OPTION>
<OPTION value=540>Pyongyang</OPTION>
<OPTION value=0>Reikiavik</OPTION>
<OPTION value=-180>Río de Janeiro</OPTION>
<OPTION value=180>Riyadh</OPTION>
<OPTION value=60>Roma</OPTION>
<OPTION value=-240>St. John’s</OPTION>
<OPTION value=-360>St. Paul</OPTION>
<OPTION value=-480>San Francisco</OPTION>
<OPTION value=-240>San Juan</OPTION>
<OPTION value=-360>San Salvador</OPTION>
<OPTION value=-300>Santo Domingo</OPTION>
<OPTION value=-240>Santiago</OPTION>
<OPTION value=-180>Sao Paulo</OPTION>
<OPTION value=-480>Seattle</OPTION>
<OPTION value=540>Seúl</OPTION>
<OPTION value=480>Shanghai</OPTION>
<OPTION value=480>Singapur</OPTION>
<OPTION value=60>Sofía</OPTION>
<OPTION value=720>Suva</OPTION>
<OPTION value=600>Sydney</OPTION>
<OPTION value=480>Taipei</OPTION>
<OPTION value=120>Tallinn</OPTION>
<OPTION value=300>Tashkent</OPTION>
<OPTION value=-210>Teherán</OPTION>
<OPTION value=540>Tokio</OPTION>
<OPTION value=-300>Toronto</OPTION>
<OPTION value=60>Turín</OPTION>
<OPTION value=-300>Vancúver</OPTION>
<OPTION value=60>Varsovia</OPTION>
<OPTION value=60>Venecia</OPTION>
<OPTION value=60>Viena</OPTION>
<OPTION value=600>Vladivostok</OPTION>
<OPTION value=-300 selected>Washington</OPTION>
<OPTION value=720>Wellington</OPTION>
<OPTION value=-360>Winnipeg</OPTION>
<OPTION value=390>Yangon</OPTION>
<OPTION value=60>Zagreb</OPTION>
<OPTION value=60>Zurich</OPTION>
</SELECT>
son
<input type=”submit” value=”Ver hora”></form>
Explicación:
Primero que nada iniciaremos una condición para comprobar si $_POST[hora] se ha definido en algún momento a través de la función isset(); ( solo tomara valor cuando se envíen datos a través de HTTP-POST )
Cambiaremos el tipo de dato de $_POST[hora], $_POST[min] y $_POST[segundo] de String o Cadena a Integer o Entero a través de la función settype():
Realizaremos una validación con una serie de condiciones para comprobar:
Sí El Valor es menor que 0 (cero) o mayor que 12 ó 60 según sea el caso, de ser contrarias todas estas situaciones iniciaremos el ensamblaje de una serie de instrucciones.
Condición: if($_POST[tm]==’pm’ && $_POST[hora]>=1 && $_POST[hora]<12)
Expresamos si la hora es PM pero además esa hora debe ser mayor o igual que 1 y menor a 12, pues si evalúa TRUE nos hará llevar la hora a en base 24 :
Por ejemplo: si se inserta 1 HORA PM debemos llevarlo a 13 horas, para ello sumamos $_POST[hora] más 12 horas transcurridas como constante.
Luego asociamos a la variable $total_minutos_el valor devuelto por la multiplicación entre $_POST[hora] y 60 más los minutos “$_POST[min]” redondeado hacia abajo mediante la función matemática floor(), para llevar la expresión de Hora:Minutos a minutos totales.
Definimos el valor de la variable $dia, este valor se mantendrá siempre y cuando las circunstancias así lo toleran, pues puede ser cambiado o remplazado si alguna de las condiciones subsiguientes evalúa TRUE.
Sí $_POST[ciudad1] es mayor o igual a 0,
Recordemos que el valor de $_POST[ciudad1] será la hora con respecto al meridiano de la ciudad tomada como referencia, Ese entero puede ser negativo o positivo y esta condición evaluara TRUE solo si es positivo; para realizar una resta entre $total_minutos_ y el valor de $_POST[ciudad1] asociándolo a la variable $gmt.
De lo contrario a sí $_POST[ciudad1] es mayor o igual a 0,
Quiere decir que $_POST[ciudad1] es negativo y lo pasaremos a positivo, multiplicándolo por -1 .
$_POST[ciudad1]*-1;
Y realizamos una suma entre $_POST[ciudad1] y $total_minutos_, lo contrario del caso anterior.
¿ Para que y con que sentido?
Debemos determinar si el valor resultante es positivo o negativo para constatar si la diferencia es del día anterior o del día siguiente.
Si es menor a 0 (negativo)
Cambiamos el valor anteriormente asignado a $dia por día anterior y le agregamos a $gmt “1440” minutos totales de un día.
Sí $_POST[ciudad2] es mayor que 0 , esta hacia el ESTE del meridiano
Sumamos $tiempo2 y $total_minutos_, y lo asociamos a $tiempo2.
De lo contrario a Sí $_POST[ciudad2] es mayor que 0.
Realizamos un operación similar a la anterior pero esta vez le sumamos el valor de $gmt, definido en procesos anteriores.
Dentro de ese marco realizamos dos condiciones mas:
Si $tiempo2 es mayor que el total de minutos de un día (1440), entonces es el día siguiente.
Si $tiempo2 es menor que 0 entonces es del día anterior.
Finalmente sin importar la rutina empleada retornamos el resultado, transformando esos minutos resultantes en horas : para ello lo dividiremos entre 60 y redondeamos ese valor hacia abajo, asociamos el resultado a la variable: $hora_de_la_otra_ciudad
Y damos salida al navegador por medio de un echo.
Fuente:enlace
                                  "Desarrolla tus ideas con los Cursos, Diplomados y Maestría en Uneweb www.uneweb.edu.ve"

No hay comentarios:

Publicar un comentario

Entradas populares