Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Explanation
La conversin de tipo no es ms que cambiar el tipo de datos de una determinada variable de un tipo a
otro. Dicho cambio en los tipos de datos se llama Type Casting.
PHP automticamente convierte de un tipo a otro siempre que sea posible. Por ejemplo, si asigna un
valor cadena a la variable, esta variable se convierte en una variable cadena.
A veces, la conversin automtica de tipos lleva a resultados inesperados. Por ejemplo, llamar "print"
en una matriz hace que PHP imprima "Matriz" en lugar de los elementos de la matriz. PHP no convierte
automticamente la matriz en una cadena de todos sus elementos.
Si usted desea obtener el tipo de variable, puede utilizar la funcin gettype ().
Ejemplo:
print gettype($var1);
El cdigo anterior imprimir el tipo de la variable $var1.
Ejemplo:
<?php
$var1 = "5bar"; // cadena
$var2 = true; // booleano
settype($var1, "integer");// $var1 se establece ahora en 5
(entero)
settype($var2, "string"); //$var2 es ahora el valor "1"
(cadena)
?>
En el ejemplo anterior a $var1 se le asigna un valor de cadena por lo que es una variable de cadena y
$var2 tiene un valor booleano por lo que es una variable booleana. Ahora $var1 est forzada a cambiar
a tipo entero y $var2 est forzada a cambiar a tipo cadena utilizando la funcin settype.
Si desea cambiar temporalmente el tipo, es decir, desea utilizarlo dentro de una expresin, puede
utilizar type casting.
Ejemplo:
(type)$variable
donde type es un tipo de variable que se desea convertir. Algunos ejemplos son:
Ejemplo:
<?php
$var1 = 12.2; // doble
$var2 = "pre"; // cadena
$var3= 10; //entero
$var4=(string)$var1;// $var1 se establece ahora en 12,2 (cadena)
$var5=(boolean)$var2; // $var2 est establecida en 1 (booleano)
$var6=(double)$var3; // $var3 se establece ahora en 10 (doble)
print gettype($var4);
print gettype($var5);
print gettype($var6);
?>
Aqu $var1 se convierte en tipo cadena, $var2 se convierte en tipo booleano y $var3 se convierte al tipo
doble.
Es importante saber que la mayora de las conversiones de tipos de datos se pueden hacer por su cuenta
y algunas conversiones pueden conducir a la prdida de informacin.
El programador de una aplicacin, ya sea en lenguaje PHP o en cualquier otro lenguaje, se enfrenta a
menudo con la necesidad de convertir los datos de tiempo, entre los formatos de presentacin fciles de
leer por un ser humano, y los formatos tiles para ser procesados y almacenados. En este artculo
comentamos las posibilidades que ofrece PHP para el tratamiento de estos datos.
Histricamente, el ser humano representa el tiempo en unidades de aos, meses, da del mes, horas,
minutos y segundos. Adems, cada uno de los meses del ao tiene un nombre, de modo que una fecha y
hora determinadas se representan habitualmente como una cadena de texto: 17 de Marzo de 2012,
15:35:07
Un programa de ordenador puede utilizar el mismo esquema, haciendo uso de una variable que
contiene dicha cadena de texto:
Naturalmente, esta representacin es muy ineficiente, porque ocupa mucho espacio y no permite la
manipulacin aritmtica de las fechas.
Otra posibilidad es definir una variable numrica para cada uno de los elementos. En el caso de los
meses, utilizamos una variable numrica con valores 1 a 12 para representar los doce meses del ao:
$anno = 2012;
$mes = 3; // 3 => Marzo
$dia = 17
$hora = 15
$minuto = 35
$segundo = 7;
De esta manera podemos trabajar mejor, pero la aritmtica de fechas todava es complicada, y estamos
utilizando seis valores enteros, que son 24 bytes en una arquitectura de 32 bit).
Unix timestamp
Cuando comenz a desarrollarse el sistema unix a comienzos de los aos 70 del pasado siglo, se adopt
la representacin de las fechas como un nico valor entero, conteniendo los segundos transcurridos
desde al 1 de Enero de 1970 a las cero horas, cero minutos y cero segudos (las fechas anteriores se
representan simplemente como valores negativos).
Esta representacin, conocida como unix timestamp es la ms compacta, y permite comparar fechas,
y realizar todo tipo de operaciones aritmticas con ellas. Adems slo consume cuatro bytes para
almacenar un valor entero en una arquitectura de 32 bit.
<?php
$ahora = time();
print "La fecha actual es: " . $ahora . "n";
$hora = ($ahora % (24*60*60)) / (60*60);
$minuto = (($ahora % (24*60*60)) / 60) % 60;
print "La hora actual es: " . floor($hora) . ":" . floor($minuto) . "n";
?>
Como vemos, la hora que devuelve la funcin date() en el ejemplo es posterior en una hora a la que
hemos calculado nosotros. Esto se debe a que la funcin date() devuelve la hora local, que depende
de la zona horaria en la que nos encontramos, y del cambio horario que se aplica en algunos pases en
verano (DST, Daylight Saving Time) para ahorrar en el consumo de energa. Por el contrario la
funcin time siempre devuelve el tiempo GMT (Greenwich Meridian Time).
06/02/2012 00:00
06/02/2012 00:00
02/06/2012 00:00
06/08/2012 17:20
06 Aug 2012 17:20
06 Aug 2012 17:20
01 Jan 1970 01:00
Error en formato de fecha
Como vemos, las primeras dos sentencias producen el resultado esperado. Sin embargo, la tercera
intercambia los valores de da y mes, porque strtotime espera el formato americano MM/DD/YYYY.
De nuevo, las sentencias 4, 5 y 6 reconocen correctamente una fecha con hora y minuto. Pero en las
sentencias 5 y 6, vemos que tanto strtotime() como date() utilizan el nombre del mes en ingls. Si
nuestra fecha est en otro idioma, tendremos que hacer previamente la conversin.
Por ltimo, la sptima sentencia imprime la fecha 01 Jan 1970 01:00 ! Lo que ha ocurrido es que la
funcin strtotime no ha podido interpretar la fecha, porque el mes no est en ingls, y ha devuelto un
cero. Si convertimos un valor cero con la funcin date, devuelve la hora local correspondiente a la
fecha 01 Jan 1970 00:00, que en nuestro caso es 01 Jan 1970 01:00.
$ahora= time();
$anno = date("Y",$ahora);
$mes = date("m",$ahora);
$dia = date("d",$ahora);
JavaScript
1 $inicial= "01/02/1986";
2 $fecha = str_replace("/", "-",$_POST['FECHA']);
3 $date = date('Y-m-d H:i:s', strtotime($fecha));
WEBMASTER | TENERIFE
int mktime ( [int hora[, int minuto[, int segundo [, int mes [, int dia [, int ao
[, int es_dst]]]]]]])
Como vemos, el orden de los argumentos es al estilo americano, con el mes antes que el da.
Por otra parte, todos los valores son opcionales, y los que no se especifican se toman de la fecha en
curso (incluido el flag que indica si se aplica la correccin DST).
producen el resultado:
18/10/2012 17:13
18/10/2012 17:20
18/08/2012 17:20
06/08/2012 17:20
06/08/2012 17:20
06/08/2012 18:20
En la ltima sentencia (en la que no se aplica el DST), la fecha obtenida es posterior en una hora a la
que se obtiene cuando se aplica la correccin horaria.