You are on page 1of 7

Conversin de tipos en PHP

Cmo hacer conversin de tipos en PHP

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.

Si desea cambiar permanentemente el tipo de variable, puede utilizar la funcin settype().

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.

Consideremos el ejemplo de convertir un valor de punto flotante a entero, conducir a la prdida de


informacin.

Cmo trabajar con fechas en PHP


PHP Aadir comentarios
oct 182012
( Read this post in english )

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.

Representaciones del tiempo


Como cadena de texto

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:

$fecha = "17 de Marzo de 2012, 15:35:07";

Naturalmente, esta representacin es muy ineficiente, porque ocupa mucho espacio y no permite la
manipulacin aritmtica de las fechas.

Como un conjunto de componentes

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.

Obtener la fecha y hora actuales


La funcin time devuelve la fecha y hora actuales como un valor entero en formato unix timestamp.
La sentencia:

<?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";
?>

devuelve como resultado:

La fecha actual es: 1350561514


La hora actual es: 11:58

Convertir el formato unix timestamp en una cadena de texto


Con la funcin date() podemos transformar el valor entero que devuelve la funcin time() en una
cadena de texto legible por un ser humano. El formato concreto se le pasa en forma de una cadena de
texto que contiene una especificacin de formato.Si aadimos al script del ejemplo la sentencia:

print "La fecha completa es: " . date("d/m/Y H:i",$ahora) . "n";

Obtenemos como resultado:

La fecha actual es: 1350562038


La hora actual es: 12:7
La fecha completa es: 18/10/2012 13:07

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

Convertir una fecha contenida en una cadena de texto a formato


unix timestamp
PHP tambin dispone de una funcin strtotime(), que convierte una cadena de texto en un entero en
formato unix timestamp.
A continuacin podemos ver algunos ejemplos:

print date("d/m/Y H:i",strtotime("6 Feb 2012")) . "n";


print date("d/m/Y H:i",strtotime("2012-02-06")) . "n";
print date("d/m/Y H:i",strtotime("6/2/2012")) . "n";
print date("d/m/Y H:i",strtotime("2012-08-06 17:20")) . "n";
print date("d M Y H:i",strtotime("2012-08-06 17:20")) . "n";
print date("d M Y H:i",strtotime("Aug 6 2012 17:20")) . "n";
print date("d M Y H:i",strtotime("Ago 6 2012 17:20")) . "n";
if (strtotime("Ago 6 2012 17:20") == 0) {
print "Error en formato de fechan";
}

Estas sentencias producen el siguiente resultado:

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.

La ltima lnea corresponde a la sentencia en donde comprobamos el valor devuelto, e imprimimos un


mensaje de error si es cero.

Extraer los componentes de una fecha


Si lo que queremos es obtener los distintos componentes ao, mes, dia, de una fecha, podemos
utilizar la funcin date con las adecuadas especificaciones de formato:

$ahora= time();
$anno = date("Y",$ahora);
$mes = date("m",$ahora);
$dia = date("d",$ahora);

Convertir fecha string en


datatime mysql.
Supongamos que tenemos esta fecha en formato string 01/02/1986, para guardarla en formato datatime
en mysql tenemos que convertirla.

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

Crear una fecha a partir de sus componentes


Para crear una fecha en formato unix timestamp a partir de sus componentes, PHP dispone de la
funcin mktime():

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

Ejemplo. Las sentencias:

print date("d/m/Y H:i",mktime(17)) . "n";


print date("d/m/Y H:i",mktime(17,20)) . "n";
print date("d/m/Y H:i",mktime(17,20,0,8)) . "n";
print date("d/m/Y H:i",mktime(17,20,0,8,6,2012)) . "n";
print date("d/m/Y H:i",mktime(17,20,0,8,6,2012,1)) . "n";
print date("d/m/Y H:i",mktime(17,20,0,8,6,2012,0)) . "n";

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

Como vemos, en donde no se especifican, se asumen el minuto, dia, mes y ao correspondientes al


momento en que se ejecuta el script.

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.

You might also like