Foros del Web » Programando para Internet » PHP »

Sobre fechas

Estas en el tema de Sobre fechas en el foro de PHP en Foros del Web. Puse este mensaje en el foro de Base de Datos, pero desgraciadamente aquello anda un poco dormido, así que si me disculpan lo voy a ...
  #1 (permalink)  
Antiguo 19/02/2003, 06:11
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 9 meses
Puntos: 0
Sobre fechas

Puse este mensaje en el foro de Base de Datos, pero desgraciadamente aquello anda un poco dormido, así que si me disculpan lo voy a exponer aquí. Perdón de nuevo por las molestias.
Cita:
A ver si me entero con las fecha...

Tengo en mi DB el campo FECHA en formato DATE, que lee la fecha en el formato AAAA-MM-DD, entonces, cual es el proceso para que la fecha que el usuario escribe en el formulario en formato DD-MM-AAAA, se guarde en el formato de MySQL?

¿Sería?:


Código PHP:
mysql_query("insert into MITABLA DATE_FORMAT(FECHA, '%d-%m-%Y')
values ('$fecha')"
), $link); 
¿Y para editarlo?


Código PHP:
mysql_query("update MITABLA SET DATE_FORMAT(FECHA, '%d-%m-%Y')='$fecha'
where loquesea"
), $link); 
Gracias
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #2 (permalink)  
Antiguo 19/02/2003, 07:21
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 21 años, 7 meses
Puntos: 4
Aqui encontrarás ayuda especifica al respecto: http://www.mysql.com/doc/en/DATETIME.html
__________________
_________________________
La computadora nació para resolver problemas que antes no existían
  #3 (permalink)  
Antiguo 19/02/2003, 08:41
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 2 meses
Puntos: 17
Exclamación achtung!

DATE_FORMAT(FECHA, '%d-%m-%Y')

Funciona en SELECTs, pero en un INSERT o en un UPDATE, debes asignar valor al campo sin modificar (FECHA).

Para eso, deberas usar la funcion date() o strftime() de PHP para formatear el valor que quieres asignar a FECHA.
__________________
M a l d i t o F r i k i
  #4 (permalink)  
Antiguo 19/02/2003, 09:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Como dice Cain ..

DATE_FORMAT() SOLO es para darle el formato de "salida" a una fecha tipo DATE/DATETIME/TIMESTAMP de tu tabla ...

A la hora de guardar la fecha (INSERT) o actualizarla (UPDATE) lo tienes q guardar en el formato standar ODBC de fechas: aaaa-mm-dd hh:mm:ss .. Es mas, si intentas poner tu propio formato a la fecha veras q Mysql "lo trunca" al formato ODBC con lo cual se obtiene una fecha no correcta.

A la hora de hacer tu SELECT es donde si lo deseas puedes darle formato a tu fecha via DATE_FORMAT() (desde Msyql . lo recomendable) .. o desde PHP como se mencionó.

Un saludo,
  #5 (permalink)  
Antiguo 19/02/2003, 09:45
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 9 meses
Puntos: 0
Gracias chicos.

Como único comentario al respecto, he de afirmar que la única pega (y gordísima, por cierto) que tiene mySql es el trabajo con fechas, que complican el trabajo de los webmaster sobre manera.


¿Solución?...
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #6 (permalink)  
Antiguo 19/02/2003, 09:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Pega? .. gordisima?

Las fechas q trata Mysql con sus campos DATE son standars del ODBC .. si tu quieres hacerte tu propio formato de fecha usa un campo VARCHAR y te lo guardas como a ti te guste como un string (cadena) caulquiera .. Ya veras los problemas q tienes para formaterar fechas . .para hacer cálculos sobre ellas .. y un largo etc...

SOLUCION:
Usa DATE_FORMAT() e intenta seguir los standars.

Lo úncio q te puede complicar es a la hora de ingresar tu dato de fecha desde tu formularios por ejemplo donde recoges las fecha en formato dd-mm-aaaa u otros .. En ambos casos (si usases tu propio VARCHAR o el DATE standar) tendrias el problema o bien a la hora de hacer tus "INSERT"/Update .. o tus SELECT pues en ambos casos en algun momento has de estar concatenndo tus "string" q recojas de tus formularios o haciendo algun split() + concatenar para "ordenar" una fehca en formato ODBC.

A su vez .. usar formatos ODBC de fechas te servirá (igual tu no usas esa opcion pero es muyy frecuente en muchos ambitos ) el exportar tus tablas o tus base de datos completas hacia otras BD (MS Sql server .. Oracle .. ..etc) o incluso hasta una hoja de calculo Excell por ejemplo (digo directo .. sin ningun script por medio q llegase a "formatear" la fecha como la requieran estas BD o lo q sea q exportases).

Un saludo,
  #7 (permalink)  
Antiguo 19/02/2003, 10:25
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 9 meses
Puntos: 0
Necesito jugar con fechas, comparándolas, restándolas... y me han recomendado no usar el tipo DATE o semejantes, sino un formato numérico, y que luego hay un sistema para pasar dichos números a fecha y poder realizar operaciones matemáticas con ellos.

¿Saben algo al respecto?
Gracias
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #8 (permalink)  
Antiguo 19/02/2003, 10:34
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 1 mes
Puntos: 2
Yo es lo que uso para el tema de fechas , se utiliza el mktime que lo que hace es pasarte la fecha al numero unix timestamp que es lso segundos que hacen desde el 1-enero de 1970 (epoca unix)

Con getdate(mktime()) por ejemplo cojes la fecha actual en formato unix que e dari algo asi como muchos numeros 3155673600123123 nos e cuantos exacatmente.

Entonces luego ya juegas calculando con eso restando a los segundos que da el dia de hoy los de cuando se registro un usuario y sabes cuatos dias lleva etc..


un saludo y espeor te sirva
  #9 (permalink)  
Antiguo 19/02/2003, 10:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
El formato "numerico" q te habran comentado es TIMESTAMP .. esos son SEGUNDOS trasncurridos desde el '70 a la fecha .. (aprox) ...

Igualmente usando campos DATE de Msyql tienes funciones para "convertir" al vuelo fechas a TIMESTAMP y poder operar con ellas en segudondos ..

Te recomiendo q leas el manual de Mysql .. Es lo mas óptimo trabajar con las propias funciones de Msyql si las vas aplicar a consultas q hgas de tu BD...

http://www.mysql.com/doc/en/DATETIME.html
http://www.mysql.com/doc/en/Date_and...functions.html

Un saludo,
  #10 (permalink)  
Antiguo 19/02/2003, 14:20
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 21 años, 7 meses
Puntos: 4
Cita:
Mensaje Original por ferent
Gracias chicos.

Como único comentario al respecto, he de afirmar que la única pega (y gordísima, por cierto) que tiene mySql es el trabajo con fechas, que complican el trabajo de los webmaster sobre manera.


¿Solución?...

Yo he usado mucho el TIMESTAMP, el cual es 100% formateable y muy manejable pues se maneja como cadena de caracteres.

Pero la decisión de que usas y cómo lo usas es sólo tuya



NOTA DE ULTIMO MINUTO (jejeje acabo de leer el mensaje de Cluster): El TIMESTAMP de MySQL NO ES LO MISMO que el TIMESTAMP de UNIX.
__________________
_________________________
La computadora nació para resolver problemas que antes no existían

Última edición por temaqueja; 19/02/2003 a las 14:23
  #11 (permalink)  
Antiguo 19/02/2003, 19:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
El tipo de dato "TIMESTAMP" de Mysql no es UNIX .. pero si q dispones de la funcion:

UNIX_TIMESTAMP(date)

Y funciones afines para trabajar con TIMESTAMP de UNIX en Mysql.

Cita:
UNIX_TIMESTAMP(date)
If called with no argument, returns a Unix timestamp (seconds since '1970-01-01 00:00:00' GMT) as an unsigned integer. If UNIX_TIMESTAMP() is called with a date argument, it returns the value of the argument as seconds since '1970-01-01 00:00:00' GMT. date may be a DATE string, a DATETIME string, a TIMESTAMP, or a number in the format YYMMDD or YYYYMMDD in local time:
mysql> SELECT UNIX_TIMESTAMP();
-> 882226357
mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580

When UNIX_TIMESTAMP is used on a TIMESTAMP column, the function will return the internal timestamp value directly, with no implicit ``string-to-unix-timestamp'' conversion. If you pass an out-of-range date to UNIX_TIMESTAMP() it will return 0, but please note that only basic checking is performed (year 1970-2037, month 01-12, day 01-31). If you want to subtract UNIX_TIMESTAMP() columns, you may want to cast the result to signed integers. See section 6.3.5 Cast Functions.
fuente:
http://www.mysql.com/doc/en/Date_and...functions.html

Un saludo,
  #12 (permalink)  
Antiguo 20/02/2003, 03:08
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 9 meses
Puntos: 0
Mi problema es que ya tengo la página casi acabada, y en muchas partes de ella (es gigante (tiene unas 250 páginas)) escribo la fecha que ANTES la tenía en VARCHAR y ahora tengo que escribir en cada una de ellas el DATE_FORMAT... o sus variantes, , es puro desquicie por llevar casi tres meses con la misma p... página y encontrarme con esto al final...

Voy a seguir informándome sobre el UNIX que me parece la solución más aceptable, aunque todavía no lo tengo cogido del todo.

Gracias chicos por el empujón
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:52.