Duda sobre NOW() (MySQL)

v3sTi4

Hola, buenas,

Estoy desarrollando un sistema de noticias php desde 0 usando la bases de datos MySQL.

Si bien les explico que he creado la tabla de mi bd un campo llamado "fecha" y "fechainserccion".
Fecha de tipo DATE y FECHAINSERCCIÓN de tipo TIMESTAMP.
Se que tal vez no debería haber hecho estos dos campos y con uno bastaría pero lejos de esto que el motivo por el que los he creado es para "ordenar noticias" de más recientes a menos, EL PROBLEMA EN que cuando INSERTO los datos para estos campos utilizó: NOW()

De este modo, cuando consulto la bd desde un archivo php el de tipo DATE me lo imprime de esta forma 2007/10/25
Yo lo que quiero es alterar el orden, pero no se hacerlo.

Por otra parte, tal vez si sólo trabajase con Timestamp podría usar la función date(); y ahí convertir el timestamp al formato de fecha que yo desee incluido si quiero las horas.
Pero no estoy muy seguro de que esta sea la mejor solución, o sí. Tal vez esta solución sea más larga pero alomejor es mejor porque me ahorro un campo.

Ustedes que me sugieren, puedo cambiar lo que me genera NOW como DATE 2007/10/25 a 25/10/2007 o trabajo en formato TIMESTAMP y convierto.

Gracias.

r2d2rigo

TIMESTAMP, si mal no recuerdo, te genera automaticamente la fecha y hora en la que insertaste la noticia, asi que con ese campo y algun filtro de salida, pues te bastaria para imprimir la fecha en un formato adecuado.

dagavi

Aprovecho el post que ya va de noticias: (estoy empezando con tutoriales de internet)

Teniendo en la DB un campo de texto, ¿como hacer para que en la página principal si la noticia pasa de X carácteres, palabras o párrafos (lo que se pueda hacer) pueda poner los "..." y el típico continuar leyendo?

Supongo que el problema real (con los pocos conocimientos que tengo) es limitar la noticia "reducida", ya que lo otro se me ocurriría hace algo en plan if (caráctres > N) escribe "..." link a noticia completa

SeiYa

#3 es así:

si longitud($noticia) > $max_caracteres entonces
$noticia = substr($noticia, 0, $max_caracteres) . "...";
fin si

Más o menos sería así.

dagavi

Muchas gracias!

v3sTi4

#2 Exacto Timestamp me genera la fecha.

La función mktime(); nos permite convertir una fecha en un formato convencional a una fecha en formato UNIX Timestamp.

Yo quiero hacer justamente lo inverso, una vez tengo el formato TIMESTAMP pasarlo.

Se que con la función date si escribimos algo así:
echo date("d-m-Y",time());
Nos imprime la fecha actual en formato "de día-mes-año".

La función time(); por lo que he visto imprime también en timestamp.

Pero a más de esto ya no llego. Ya no se pasar de timestamp que no me genere time() .
Se me ocurrió hacer algo como:

$fecha = $row['fecha'];
echo date("d-m-Y", $fecha);

Pero claro esto no funciona puesto que me imprime 1-1-1970 :) El primer día de timestamp :-S

v3sTi4

Para ahorrar rollo.

Si la función mktime() obtiene el timestamp a partir de una fecha, cual es la función inversa a mktime()

Es decir, existe alguna función que obtenga la fecha a partir de un timestamp.

Gracias

r2d2rigo

date() pilla como primer parametro el formato de string de salida, y como segundo un int con el timestamp: http://es2.php.net/date

v3sTi4

He probado esto:
echo date("d-m-Y", mktime($fecha));

Y nada.
Supuestamente al poner mktime($fecha) es el formato timestamp de la variable $fecha porque imprimo $fecha y me da, la hora y minutos y dia, mes y año.

Nada:-S

Como resultado de todo al hacer el echo que he puesto arriba me da el 18-1-2008 :-| Cuando me debería de dar el 25 - 10 - 2007

r2d2rigo

mktime() te devuelve un timestamp con la hora-minuto-etc que le metas, asi que por que no pruebas un date("d-m-Y",$fecha)?

v3sTi4

#10 porque cuando hago echo $fecha; creía que me devolvería el time stamp pero me devuelve el día, mes, año y la hora.
Entonces con esos parametros cogí y pensé que con mktime podría pasar esos parametros a formato timestamp y así con date moldear la función.

Lo extraño de todo es que fecha en la bd está definido como timestamp.

v3sTi4

Ya he encontrado el fallo de porque no me iba y una solución.

Al utilizar now() en la bd no se me guarda en formato timestamp (aunque yo ese campo lo haya definido como timestamp, se me guarda como YYYY-MM-DD hh:mm:ss)

Así que se me ocurrió crear el campo de fecha en lugar de "timestamp" como ""varchar(14)"

De esta forma cuando inserto los datos en la bd, no utilizo NOW(), sino utilizo time()

Conclusión se me guarda en la bd la fecha en formato timestamp.

A partir de ese momento lo que hago es que cuando se me muestre escribo
echo date("d/m/Y", $fecha);

Siempre teniendo en cuenta que $fecha = $row[fecha];

Esta es la solución que he encontrado para que me muestre la fecha bien y como yo quiero.

Seguro que hay otras formas más sencilla pero después de muchas pruebas esta ha sido mi solución.

dagavi

#12 Ahora venía a preguntar esto mismo (me acordé de este post y pensaba que a lo mejor me estaba pasando el mismo error que a ti), así que al leer el último post efectivamente es ese el fallo que a mi también me está dando.

Gracias por poner la solución :D

Usuarios habituales

  • dagavi
  • v3sTi4
  • r2d2rigo
  • SeiYa