Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con la hora en BD con CURRENT_TIME()

Estas en el tema de Problema con la hora en BD con CURRENT_TIME() en el foro de PHP en Foros del Web. Buenas tardes. hoy he estado por aqui solucionando algunos temas que hace tiempo me estan dando problemas en una web que estoy programando. Tengo un ...
  #1 (permalink)  
Antiguo 09/07/2013, 16:56
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 10 años, 9 meses
Puntos: 1
Problema con la hora en BD con CURRENT_TIME()

Buenas tardes. hoy he estado por aqui solucionando algunos temas que hace tiempo me estan dando problemas en una web que estoy programando.

Tengo un INSERT a mi BD para un sistema de comentarios con varios datos, entre los que está la fecha y la hora.

El INSERT es el siguiente:
Código PHP:
Ver original
  1. if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
  2.   $insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), %s)",
  3.                        GetSQLValueString($_POST['nombre'], "text"),
  4.                        GetSQLValueString($_POST['correo'], "text"),
  5.                        GetSQLValueString($_POST['telefono'], "text"),
  6.                        GetSQLValueString($_POST['mensaje'], "text"),
  7.                        GetSQLValueString($_POST['idnoticia'], "int"));

Yo vivo en Canarias, que es una hora menos que el resto de España. El problema es que la hora que se guarda en la base de datos es una hora más que la de aqui. No sé si el problema es que me coge la hora local de España en vez de respetarme la de mi zona horaria, o que el servidor está alojado en la península y pone la hora de alli.... pero entonces me pregunto, si envían un comentario de otra parte del mundo... ¿que hora se guardará?

Alguien tiene alguna idea de como arreglarlo para que me muestre la hora local desde la que se ha hecho el comentario. ¿O quizá no puedo arreglarlo ya que siempre cogerá la hora del servidor?

Espero si me pueden ayudar con esto.
Muchas gracias por adelantado.
Raúl
  #2 (permalink)  
Antiguo 09/07/2013, 19:16
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 12 años, 6 meses
Puntos: 48
Respuesta: Problema con la hora en BD con CURRENT_TIME()

Siempre se guardara la hora que tienes en el servidor y no la del cliente porque es el servidor el que inserta una fila.

Ahora bien, existe una función en mysql que se llama date_add en la que puedes añadirle o quitarle minutos,horas,dias..etc de diferencia.

Podrias almacenar la fecha con una hora de diferencia o podrias recuperarla dependiendo de la fecha del cliente.


Si quieres agregarle una hora al momento de la insercción(no recomendable):
Código PHP:
Ver original
  1. $hora_extra = 1;
  2. if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
  3.   $insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, DATE_ADD(NOW(), INTERVAL $hora_extra HOUR), TIME(DATE_ADD(NOW(), INTERVAL $hora_extra HOUR)), %s)",
  4.                        GetSQLValueString($_POST['nombre'], "text"),
  5.                        GetSQLValueString($_POST['correo'], "text"),
  6.                        GetSQLValueString($_POST['telefono'], "text"),
  7.                        GetSQLValueString($_POST['mensaje'], "text"),
  8.                        GetSQLValueString($_POST['idnoticia'], "int"));



Ahora si quieres recuperarla en función de la hora que tenga el cliente deberias enviar la hora del cliente con ajax.... calcular la $diferencia horaria en el servidor y al momento de traerlo agregar un date_add con un intervalo igual a $diferencia.
__________________
Rodrigo Agüero
  #3 (permalink)  
Antiguo 09/07/2013, 19:28
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Problema con la hora en BD con CURRENT_TIME()

Cita:
Iniciado por Rodrhigo Ver Mensaje
Siempre se guardara la hora que tienes en el servidor y no la del cliente porque es el servidor el que inserta una fila.

Ahora bien, existe una función en mysql que se llama date_add en la que puedes añadirle o quitarle minutos,horas,dias..etc de diferencia.

Podrias almacenar la fecha con una hora de diferencia o podrias recuperarla dependiendo de la fecha del cliente.


Si quieres agregarle una hora al momento de la insercción(no recomendable):
Código PHP:
Ver original
  1. $hora_extra = 1;
  2. if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
  3.   $insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, DATE_ADD(NOW(), INTERVAL $hora_extra HOUR), TIME(DATE_ADD(NOW(), INTERVAL $hora_extra HOUR)), %s)",
  4.                        GetSQLValueString($_POST['nombre'], "text"),
  5.                        GetSQLValueString($_POST['correo'], "text"),
  6.                        GetSQLValueString($_POST['telefono'], "text"),
  7.                        GetSQLValueString($_POST['mensaje'], "text"),
  8.                        GetSQLValueString($_POST['idnoticia'], "int"));



Ahora si quieres recuperarla en función de la hora que tenga el cliente deberias enviar la hora del cliente con ajax.... calcular la $diferencia horaria en el servidor y al momento de traerlo agregar un date_add con un intervalo igual a $diferencia.


Claro, tiene lógica eso. Tendré que ponerme a aprender y practicar un poco de ajax que aun no lo he tocado.
Gracias por la info.

Etiquetas: bd, sql
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 06:36.