Trabajar con fechas

SicKneSs

El tema de trabajar con fechas es algo con lo que nunca he conseguido sentirme totalmente cómodo. Y particularmente en algunos proyectos es trivial hacer un buen uso de ellas.

vosotros, ¿Cómo trabajáis con ellas? usáis las funciones SQL como now(), datetime, time etc... y después las gestionan en PHP ? o ASP... o lo que sea?

yo en particular me siento mas cómodo tratándolas todas como string (tanto en la BD como en los PHP), y me he creado un pequeño script para compararlas y demás.

¿Cómo hacéis vocosotros?

salu2.

eXtreM3

DATETIME para guardar en mysql y con php hay funciones muy bonitas (y si no las creas tú) para convertir la fecha al formato que quieras, compararlas, transformarlas... una maravilla :D

EnZo

#1 Yo las guardo siempre en formato timestamp. http://php.net/manual/en/function.time.php

Y con date() le pongo el formato que me da la gana.

Lo bueno que tiene timestamp es que con un simple int(11) guardas año mes dia hora minuto y segundos. Además de que para filtrar en consultas sql es muy comodo.

3 respuestas
SicKneSs

#3 justo antes estaba mirandome timestamp, pero por ejemplo en un formulario, cómo "conviertes" un string tipo "08/03/2012" a timestamp ??

1 respuesta
EnZo

#4 http://php.net/manual/es/function.mktime.php

B

guarda en timestamp y en la vista formatea la fecha.

1 respuesta
SicKneSs

gracias ! :)

SicKneSs

#3 y #6 estoy tratando de hacer como me han dicho ustedes pero me eestoy liando.

  1. tengo un campo Fecha 'timestamp' en mi tabla.
  2. cuando inserto, uso la funcion mktime para convertir a timestamp, por ejemplo $timestamp = mktime(0,0,0,'03','09','2012');
  3. pero en la tabla se me inserta asi: 0000-00-00 00:00:00 !!!!!!

he estado leyendo la página oficial de mysql y pone esto:

"....El servidor MySQL puede ejecutarse en modo MAXDB . Cuando el servidor corre en este modo, TIMESTAMP es idéntico a DATETIME. Esto es, si el servidor está ejecutándose en modo MAXDB cuando se crea una tabla, las columnas TIMESTAMP se crean como columnas DATETIME ....."

y también:

"...Desde MySQL 5.0.2, MySQL no acepta valores timestamp que incluyan cero en la columna de día u hora o valores que no sean fechas válidas. La única excepción es el valor especial '0000-00-00 00:00:00'....."

me estoy rayando xDD, ayuda please!

1 respuesta
tada

#8 Cambia tu campo fecha a VARCHAR o INT. El formato que da mktime de PHP creo que no es el mismo que el que pide un campo timestamp (yyyy-mm-dd hh-mm-ss).

1 respuesta
SicKneSs

sorry doble post

SicKneSs

#9 la cosa esque si lo cambio a varchar o int (como lo tenia antes) después no puedo filtrar por fechas, ni hacer consultas fácilmente usando comandos SQL estilo "Select * from clientes where YEAR(fecha)='2002'"

al final lo he puesto como datetime y creo que con esto me quedo.

1 respuesta
Tunnecino

#3 Prácticamente lo mismo que el xD

#11 Espera que te busco un chorra script para eso con timestamp.

# 1 Jan to 1 Jan
$time = mktime(0, 0, 0, 1, 1, $year+1);
$time2 = mktime(0, 0, 0, 1, 1, $year);
# Get data from db
$query = mysql_query('SELECT * FROM noticias WHERE fecha BETWEEN '.$time2.' AND '.$time.' ORDER BY fecha DESC LIMIT '.$start.','.$limit);

Así si puedes buscar por año, por mes, por día...

Usuarios habituales