You are on page 1of 9

CFP 24 CURSO PAGINA WEB II PARTE V PHP Instructor: Juan M.

Fernandez Barone

Administracin de fechas y horas (funcin date)

La funcin date retorna un string con una fecha y hora, o partes de ella segn un string de formato que le pasamos como parmetro. Se obtiene la fecha y hora del servidor. Veamos como ejemplo la impresin de la fecha y hora actual del servidor: <html> <head> <title>Problema</title> </head> <body> <?php echo "La fecha de hoy es:"; $fecha=date("d/m/Y"); echo $fecha; echo "<br>"; echo "La hora actual es:"; $hora=date("H:i:s"); echo $hora; echo "<br>"; ?> <a href="pagina2.php">Siguiente problema</a> </body> </html> Los caracteres de formato utilizados en las dos llamadas de la funcin date son: d da del mes con dos dgitos "01" al "31" m mes con dos dgitos "01" al "12" Y ao con cuatro dgitos Para la hora, los caracteres que sern sustituidos son: H hora con dos dgitos "00" a "23" i minutos con dos dgitos "00" a "59" s segundos con dos dgitos "00" a "59" Los otros caracteres que disponemos al llamar a la funcin date, son retornados sin cambios, en este caso la barra y los dos puntos. Los caracteres de formato que veamos son los ms comunes, pero tenemos otras variantes posibles. Si queremos los das y meses sin el cero delante y el ao con dos dgitos tenemos entonces: <html> <head> <title>Problema</title> </head> <body> <?php echo "La fecha de hoy es:"; $fecha=date("j/n/y"); echo $fecha; echo "<br>";

CFP 24 CURSO PAGINA WEB II PARTE V PHP Instructor: Juan M. Fernandez Barone

?> <a href="pagina3.php">Siguiente problema</a> </body> </html> Los caracteres que ahora tenemos son: j da del mes "1" al "31" n mes "1" al "12" y ao con dos dgitos Por ltimo, a los otros caracteres de formato de la funcin date que nos pueden servir en alguna ocasin, los podemos ver en el siguiente ejemplo: <html> <head> <title>Problema</title> </head> <body> <?php $dato=date("L"); if ($dato==1) echo "Ao bisiesto"; else echo "Ao no bisiesto"; echo "<br>"; echo "Da de la semana:"; $dato=date("w"); switch ($dato) { case 0: echo "domingo"; break; case 1: echo "lunes"; break; case 2: echo "martes"; break; case 3: echo "mircoles"; break; case 4: echo "jueves"; break; case 5: echo "viernes"; break; case 6: echo "sbado"; break; } ?> </body> </html> Los caracteres son: L "1" or "0", segn si el ao es bisiesto o no w da de la semana, en nmero, de "0" (domingo) a "6" (sbado)

CFP 24 CURSO PAGINA WEB II PARTE V PHP Instructor: Juan M. Fernandez Barone

Validacin de una fecha ingresada por teclado (checkdate)

Si disponemos en forma separada del da, mes y ao hay, una funcin que nos indica si se trata de una fecha vlida: boolean checkdate ( mes, dia, ao) Retorna verdadero si la fecha es vlida, falso en caso contrario. Implementemos un formulario que nos solicite el ingreso de una fecha: <head> <title>Problema</title> </head> <body> <form action="pagina2.php" method="post"> Ingrese una fecha (dd/mm/aaaa): <input type="text" name="dia" size="2"> <input type="text" name="mes" size="2"> <input type="text" name="anio" size="4"> <br> <input type="submit" value="validar"> </form> </body> </html> Y la pgina que procesa la fecha ingresada es: <html> <head> <title>Problema</title> </head> <body> <?php if (checkdate($_REQUEST['mes'],$_REQUEST['dia'],$_REQUEST['anio'])) echo "La fecha ingresada es correcta"; else echo "La fecha no es vlida"; ?> </body> </html> En este programa llamamos a la funcin checkdate pasando los tres parmetros requeridos en el orden: mes, da y ao. Podemos validar previamente si se han cargado valores numricos en cada control "text", esto llamando a la funcin is_numeric(variable). Retorna true si la variable almacena un nmero, falso en caso contrario. El programa modificado quedar entonces: <html> <head> <title>Problema</title> </head> <body> <?php if (is_numeric($_REQUEST['dia']) &&

CFP 24 CURSO PAGINA WEB II PARTE V PHP Instructor: Juan M. Fernandez Barone

is_numeric($_REQUEST['mes']) && is_numeric($_REQUEST['anio'])) { if (checkdate($_REQUEST['mes'],$_REQUEST['dia'],$_REQUEST['anio'])) echo "La fecha ingresada es correcta"; else echo "La fecha no es vlida"; } else echo "La fecha no es vlida"; ?> </body> </html> Carga de una fecha en una tabla de MySQL La tabla alumnos tiene un campo que no habamos nombrado llamado "fechanac" que es de tipo "date", es decir que permite almacenar una fecha. "fechanac" almacenar la fecha de nacimiento del alumno. Veremos cual es la estructura que debemos darle a la fecha para que el MySql la tome como vlida. Haremos el alta de la tabla alumnos que habamos visto anteriormente aadindole la carga de la fecha de nacimiento. El primer formulario, prcticamente ya visto, es: <html> <head> <title>Problema</title> </head> <body> <form action="pagina2.php" method="post"> Ingrese nombre: <input type="text" name="nombre"><br> Ingrese mail: <input type="text" name="mail"><br> Ingrese la fecha de nacimiento (dd/mm/aaaa): <input type="text" name="dia" size="2"> <input type="text" name="mes" size="2"> <input type="text" name="anio" size="4"> <br> Seleccione el curso: <select name="codigocurso"> <?php $conexion=mysql_connect("localhost","root","z80") or die("Problemas en la conexion"); mysql_select_db("phpfacil",$conexion) or die("Problemas en la seleccin de la base de datos"); $registros=mysql_query("select codigo,nombrecur from cursos",$conexion) or die("Problemas en el select:".mysql_error()); while ($reg=mysql_fetch_array($registros)) {

CFP 24 CURSO PAGINA WEB II PARTE V PHP Instructor: Juan M. Fernandez Barone

echo "<option value=\"$reg[codigo]\">$reg[nombrecur]</option>"; } ?> </select> <br> <input type="submit" value="Registrar"> </form> </body> </html> Lo nico que podemos decir, es que agregamos tres controles de tipo "text" para el ingreso independiente del da, el mes y el ao. El segundo formulario, y ms importante, es el alta propiamente dicha en la tabla alumnos: <html> <head> <title>Problema</title> </head> <body> <?php $conexion=mysql_connect("localhost","root","z80") or die("Problemas en la conexion"); mysql_select_db("phpfacil",$conexion) or die("Problemas en la seleccion de la base de datos"); $fechanacimiento=$_REQUEST['anio']."-".$_REQUEST['mes']."-".$_REQUEST['dia']; mysql_query("insert into alumnos(nombre,mail,codigocurso,fechanac) values ('$_REQUEST[nombre]','$_REQUEST[mail]', $_REQUEST[codigocurso],'$fechanacimiento')", $conexion) or die("Problemas en el select".mysql_error()); mysql_close($conexion); echo "El alumno fue dado de alta."; ?> <br> <a href="pagina3.php">ver listado de alumnos</a> </body> </html> Lo primero que hacemos es generar una string que contenga el ao-mes-da, en ese orden y utilizando como separador el caracter "-": $fechanacimiento=$_REQUEST['anio']."-".$_REQUEST['mes']."-".$_REQUEST['dia']; Tenemos ahora en la variable $fechanacimiento el valor de la fecha ingresada por teclado con el formato que requiere el MySql, procedemos ahora a plantear el comando insert con todos los datos ingresados en el formulario: mysql_query("insert into alumnos(nombre,mail,codigocurso,fechanac) values ('$_REQUEST[nombre]','$_REQUEST[mail]', $_REQUEST[codigocurso],'$fechanacimiento')", $conexion) or die("Problemas en el select".mysql_error()); Por ltimo, dispusimos un hipervnculo a una tercera pgina donde mostramos el contenido de la tabla alumnos, aqu podremos controlar los datos ingresados. No hemos validado la fecha ingresada, tarea obligatoria cuando implementemos un sitio real. El ltimo archivo contiene la pgina que imprime el contenido de la tabla alumnos, con el campo fechanac inclusive: <html>

CFP 24 CURSO PAGINA WEB II PARTE V PHP Instructor: Juan M. Fernandez Barone

<head> <title>Problema</title> </head> <body> <?php $conexion=mysql_connect("localhost","root","z80") or die("Problemas en la conexion"); mysql_select_db("phpfacil",$conexion) or die("Problemas en la seleccin de la base de datos"); $registros=mysql_query("select alu.codigo as codigo,nombre,mail, codigocurso,fechanac,nombrecur from alumnos as alu inner join cursos as cur on cur.codigo=alu.codigocurso", $conexion) or die("Problemas en el select:".mysql_error()); while ($reg=mysql_fetch_array($registros)) { echo "Codigo:".$reg['codigo']."<br>"; echo "Nombre:".$reg['nombre']."<br>"; echo "Mail:".$reg['mail']."<br>"; echo "Fecha de Nacimiento:".$reg['fechanac']."<br>"; echo "Curso:".$reg['nombrecur']."<br>"; echo "<hr>"; } mysql_close($conexion); ?> </body> </html>

Formateo de datos en una pgina (printf)

Hasta ahora siempre hemos impreso dentro de la pgina, utilizando el comando echo, pero en ocasiones que necesitamos mayor control sobre el formato de impresin, podemos utilizar la funcin printf. La funcin printf requiere como primer parmetro una cadena de control donde se indica cmo deben imprimirse el resto de parmetros de la misma funcin. El siguiente ejemplo muestra el contenido de una variable entera con distintos formatos, lo mismo hacemos para una variable de tipo double: <html> <head> <title>Problema</title> </head> <body> <?php $entero=255; printf("Valor entero en formato decimal %d <br>",$entero); printf("Valor entero en formato hexadecimal con letras minsculas %x<br>", $entero);

CFP 24 CURSO PAGINA WEB II PARTE V PHP Instructor: Juan M. Fernandez Barone

printf("Valor entero en formato hexadecimal con letras maysculas %X<br>", $entero); printf("Valor entero en formato binario %b<br>", $entero); printf("Valor entero en formato octal %o<br>", $entero); $letra=65; printf("Valor entero como caracter ascii %c<br>", $letra); echo "<br>"; $real=10.776; printf("Impresion de un valor de tipo double %f <br>",$real); printf("Impresion de un valor de tipo double indicando la cantidad de decimales a imprimir %0.2f <br>",$real); ?> <br> <A href="pagina2.php">Algunas utilidades de estas conversiones</A> </body> </html> Como podemos ver, es posible imprimir el contenido de una variable entera en formato ASCII, decimal, hexadecimal, octal. Y con una variable de tipo double, la podemos restringir la cantidad de decimales que deben aparecer. La funcin printf sustituye todos los lugares en los cuales encuentra el caracter %, por el valor que le pasamos desde el segundo parmetro en adelante. Si queremos imprimir este caracter: %, con la funcin printf, debemos disponer dos: %%. Podemos ver un uso relativamente seguido para cuando imprimamos valores de tipo double y necesitemos restringir a una determinada cantidad de decimales. Pero las otras conversiones, nos servirn? Veamos una utilidad de la funcin printf formateando a tipo de dato hexadecimal: <html> <head> <title>Problema</title> </head> <body bgcolor="<?php printf("#%X%X%X",150,150,0); ?>"> En esta pgina definimos el color de fondo indicando la cantidad de rojo,verde y azul, en formato decimal y solicitando a la funcin printf que haga la conversin a hexadecimal. Recordemos que la propiedad bgcolor de la marca body, lo requiere en hexadecimal.<br><br> <a href="pagina3.php">ltimo ejemplo</a> </body> </html> La funcin printf puede formatear n datos en una nica llamada, como ocurre en este caso: <body bgcolor="<?php printf("#%X%X%X",150,150,0); ?>"> Cuando tenemos los tres valores en formato decimal, para crear un color, la funcin printf nos facilita la tarea de generar el color definitivo en hexadecimal. Por ltimo, con la funcin printf, podemos determinar el nmero de caracteres que va a ocupar o en su defecto se rellenar con ceros: <html> <head>

CFP 24 CURSO PAGINA WEB II PARTE V PHP Instructor: Juan M. Fernandez Barone

<title>Problema</title> </head> <body> <?php $dia=6; $mes=5; $anio=2006; printf("%02d/%02d/%d",$dia,$mes,$anio); ?> </body> </html> Con esto logramos que una fecha aparezca con el da y el mes siempre de dos dgitos. Si deseamos rellenar con otro caracter debemos disponer una simple comilla y el caracter a rellenar: $importe=170; printf("Valor:$%'x7d",$importe); Formateo de datos y salida a un string (sprintf)

As como vimos que la funcin printf nos permite tener un control ms fino sobre cmo un dato debe imprimirse en una pgina, la funcin sprintf nos permite formatear la salida de un dato hacia un string y no a la pgina HTML. Tipos de conversin utilizadas por la funcin sprintf (tener en cuenta que son los mismos caracteres de control que se aplican a la funcin printf): %b Formatea un entero como un nmero binario. %d Formatea un entero como un nmero decimal con signo. %u Formatea un entero como un nmero decimal sin signo. %o Formatea un entero como un nmero octal. %x Formatea un entero como un nmero hexadecimal en minsculas. %X Formatea un entero como un nmero hexadecimal en maysculas. %c Formatea un entero como un caracter ASCII. %f Formatea un double con una cantidad de decimales. %s Formatea un string. Un ejemplo utilizando la funcin sprintf: <html> <head> <title>Problema</title> </head> <body> <?php function retornarColorHexa($rojo,$verde,$azul) { $color=sprintf("#%02X%02X%02X",$rojo,$verde,$azul); return $color; } ?>

CFP 24 CURSO PAGINA WEB II PARTE V PHP Instructor: Juan M. Fernandez Barone

<table> <tr> <td bgcolor="<?php echo retornarColorHexa(255,0,0)?>">Cuadro rojo</td> <td bgcolor="<?php echo retornarColorHexa(0,255,0)?>">Cuadro verde</td> <td bgcolor="<?php echo retornarColorHexa(0,0,255)?>">Cuadro azul</td> </tr> </table> </body> </html> Implementamos una funcin a la cual le enviamos 3 valores decimales y nos retorna un string que especifica un color en hexadecimal.

You might also like