Luego de mucho tiempo trabajando con la función date(), creando campos INT en MySQL y luego usando una función para calcular a partir de ese INT la fecha que almacena (al mas puro estilo SMF) creo haber dado con la fórmula perfecta, al menos para mi, de trabajar con este dato.
El proceso va orientado a una web con sistema de noticias, comentarios, peticiones y demás por lo que es importante tener un registro de fechas y horas.
Empezamos montando la tabla de ejemplo
Podemos apreciar que estas funciones guardan los datos en formato EEUU (2010-01-28 15:38:54), cosa que no nos interesa y por la cual normalmente buscariamos otro método, pero aquí viene lo interesante.
La función DATE_FORMAT
Con esta función nos podemos permitir el lujo de formatear las fechas a nuestro anotjo a la hora de hacer las consultas.
Un ejemplo:
Como se aprecia en el ejemplo tenemos una hora y fechas perfectamente formatadas.
Tratando las fechas en PHP
Ahora ya solo importa como vayamos a utilizar esta información, para el ejemplo yo voy a comprobar que se haya escrito hace menos de una hora, hoy o ayer, en caso de no ser ninguno de estos casos muestro la fecha mas no la hora.
He agregado un valor y modificado dos para que se produzca cada caso, así que ahora tenemos:
Y para finalizar la salida de la página:
Publicado: Hace una hora
Publicado: Hoy
Publicado: Ayer
Publicado: 25/01/10
Espero que os sirva para un futuro.
El proceso va orientado a una web con sistema de noticias, comentarios, peticiones y demás por lo que es importante tener un registro de fechas y horas.
Empezamos montando la tabla de ejemplo
mysql> DESCRIBE horas; +-------+-----------+------+-----+-------------------+--------------------------+ | FIELD | Type | NULL | KEY | DEFAULT | Extra | +-------+-----------+------+-----+-------------------+--------------------------+ | hora | timestamp | NO | | CURRENT_TIMESTAMP | ON UPDATE CURRENT_TIMESTA MP | +-------+-----------+------+-----+-------------------+--------------------------+ mysql> SELECT * FROM horas; +---------------------+ | hora | +---------------------+ | 2010-01-28 15:38:26 | | 2010-01-28 15:38:49 | | 2010-01-28 15:38:54 | +---------------------+ 3 rows IN SET (0.00 sec)
Se puede apreciar claramente que estamos utilizando el tipo timestamp y como valor por defecto CURRENT_TIMESTAMP.Podemos apreciar que estas funciones guardan los datos en formato EEUU (2010-01-28 15:38:54), cosa que no nos interesa y por la cual normalmente buscariamos otro método, pero aquí viene lo interesante.
La función DATE_FORMAT
Con esta función nos podemos permitir el lujo de formatear las fechas a nuestro anotjo a la hora de hacer las consultas.
Un ejemplo:
mysql> SELECT DATE_FORMAT(hora, '%H:%i:%s %e/%m/%y') AS hora FROM horas; +-------------------+ | hora | +-------------------+ | 15:38:26 28/01/10 | | 15:38:49 28/01/10 | | 15:38:54 28/01/10 | +-------------------+
Como se aprecia en el ejemplo tenemos una hora y fechas perfectamente formatadas.
Tratando las fechas en PHP
Ahora ya solo importa como vayamos a utilizar esta información, para el ejemplo yo voy a comprobar que se haya escrito hace menos de una hora, hoy o ayer, en caso de no ser ninguno de estos casos muestro la fecha mas no la hora.
He agregado un valor y modificado dos para que se produzca cada caso, así que ahora tenemos:
mysql> SELECT DATE_FORMAT(hora, '%H:%i:%s %e/%m/%y') AS hora FROM horas; +-------------------+ | hora | +-------------------+ | 15:38:26 28/01/10 | | 13:38:49 28/01/10 | | 22:38:54 27/01/10 | | 22:38:54 25/01/10 | +-------------------+ 4 rows IN SET (0.01 sec)
El código encargado de tratar con las fechas es:
<?php
$con = mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('z_test',$con) or die(mysql_error());
$query = mysql_query("SELECT DATE_FORMAT(hora, '%H:%i:%s %e/%m/%y')
AS hora FROM horas;",$con);
while ($list = mysql_fetch_array($query)) {
$all = explode(' ', $list['hora']);
$data = explode('/', $all[1]);
$time = explode(':', $all[0]);
echo '<br />Publicado: ';
if (date('H') - $time[0] <= 1 && date('d') == $data[0])
echo 'Hace una hora';
else if (date('d') == $data[0])
echo 'Hoy';
else if (date('d') - $data[0] == 1)
echo 'Ayer';
else
echo $all[1];
}
?>
Y para finalizar la salida de la página:
Publicado: Hace una hora
Publicado: Hoy
Publicado: Ayer
Publicado: 25/01/10
Espero que os sirva para un futuro.
Che muy buena tu pagina y gracias por tu ayuda en foro.elhacker.net
mi msn es octavioxd@msn.com
me sirven mucho las cosas que escribis ojala halla mas personas como vos sos un kapo!
suerte!
me alegro que sea de ayuda para alguien ;)
ahí te agregué así que ya hablaremos cuando esté mas desocupado