Foros del Web » Programando para Internet » PHP »

Dates y errores de fechas en BD

Estas en el tema de Dates y errores de fechas en BD en el foro de PHP en Foros del Web. Buenas tardes chicos! como les va? Espero que bien? bueno, paso a comentarles mi problema. El tema es que como me gusta tener controlada las ...
  #1 (permalink)  
Antiguo 07/10/2010, 16:50
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 9 meses
Puntos: 4
Dates y errores de fechas en BD

Buenas tardes chicos! como les va? Espero que bien?

bueno, paso a comentarles mi problema.

El tema es que como me gusta tener controlada las cosas, en mi bd llevo un control de todos los emails que se envian los usuarios, en esta base, guardo la fecha (dia y hora) entre otras cosas, pero el problema viene cuando alguien de otro lugar (Pais) con diferente zona horaria envia algun email, ¿porque? porque me guarda la fecha que el tiene en su computadora, por lo cual me esta generando un par de errores, ya que como habran visto en otro post, hago un envio de email automatico cada hora (El cual me resulta necesario hacer), y por ende necesito saber la hora REAL u OFICIAL. Por ejemplo: en la bd tengo emails que se enviaron a las 14 horas, entonces a las 15 horas debo volver a enviar, pero si un usuario entra dede otro pais y envia emails, se guarda la fecha del usuario (Ej: 10hs) entonces se me arma el quilombooo!

ajaja

les muestro de que se trata todo esto

Esto es basicamente el archivo1.php

Selecciono el ultimo email enviado con el asunto de invitacion:
Código PHP:
$sql="SELECT MAX(clave) FROM `email` WHERE asunto='Invitacion' ORDER BY clave DESC";
$res=mysql_query($sql) or die (mysql_error());
$ultimo=mysql_fetch_array($res);
echo
"<br />Clave del ultimo email de invitacion: ".$ultimo['0']."<br />";
$last=$ultimo['0']; 
luego busco la fecha de ese mensaje
Código PHP:
$sql2="SELECT fecha FROM `email` WHERE clave=$last";
$res2=mysql_query($sql2) or die(mysql_error());
$ultimo2=mysql_fetch_array($res2);
echo 
"Fecha del ultimo email de invitacion: "$ultimo2['fecha']."<br/>";
$fecha1=$ultimo2['fecha']; 

Luego busco el ultimo email con cualquier asunto
Código PHP:
$sql3="SELECT MAX(clave) FROM `email` ORDER BY clave DESC";
$res3=mysql_query($sql3) or die (mysql_query());
$ultimo3=mysql_fetch_array($res3);

echo 
"Clave del ultimo email general: ".$ultimo3['0']."<br />";
$last2=$ultimo3['0']; 
y aqui la fecha del mismo
Código PHP:
$sql4="SELECT fecha FROM `email` WHERE clave=$last2";
$res4=mysql_query($sql4) or die(mysql_error());
$ultimo4=mysql_fetch_array($res4);

echo 
"Fecha del ultimo email general: "$ultimo4['fecha']."<br/>";
$fecha2=$ultimo4['fecha']; 

pongo la fecha1 en formato mktime()
$fecha1 es la hora el ultimo email con motivo invitar usuarios

Código PHP:
$dia1=$fecha1['0'].$fecha1['1'];
$mes1=$fecha1['3'].$fecha1['4'];
$anio1=$fecha1['6'].$fecha1['7'].$fecha1['8'].$fecha1['9'];
$hora1=$fecha1['11'].$fecha1['12'];
$minutos1=$fecha1['14'].$fecha1['15'];
echo 
"Fecha 1 es la del email con asunto invitar usuarios: ".$dia1."/".$mes1."/".$anio1." ".$hora1.":".$minutos1."<br/>";
$algo1=mktime($hora1,$minutos1,"00",$mes1,$dia1,$anio1);
echo 
"Fecha 1 en mktime(): ".$algo1."<br>"
pongo la fecha2 en formato mktime()
//$fecha2 es la hora el ultimo email general
Código PHP:
$dia2=$fecha2['0'].$fecha2['1'];
$mes2=$fecha2['3'].$fecha2['4'];
$anio2=$fecha2['6'].$fecha2['7'].$fecha2['8'].$fecha2['9'];
$hora2=$fecha2['11'].$fecha2['12'];
$minutos2=$fecha2['14'].$fecha2['15'];

echo 
"Fecha 2 es la del ultimo email general: ".$dia2."/".$mes2."/".$anio2." ".$hora2.":".$minutos2."<br/>";
$algo2=mktime($hora2,$minutos2,"00",$mes2,$dia2,$anio2);
echo 
"Fecha 2 en mktime(): ".$algo2

luego saco la hora actual y la transformo a mktime()
Código PHP:
$fecha3=date("d/m/Y H:i");
echo 
"<br />Hora actual: ".$fecha3;

$dia3=$fecha3['0'].$fecha3['1'];
$mes3=$fecha3['3'].$fecha3['4'];
$anio3=$fecha3['6'].$fecha3['7'].$fecha3['8'].$fecha3['9'];
$hora3=$fecha3['11'].$fecha3['12'];
$minutos3=$fecha3['14'].$fecha3['15'];

$fechamktime3=mktime($hora3,$minutos3,"00",$mes3,$dia3,$anio3);
echo 
"<br />Hora actual en mktime() ".$fechamktime3
Le resto 1 hora a la actual
Código PHP:
$fechamktime4=mktime($hora3-"1",$minutos3-"1","00",$mes3,$dia3,$anio3);
echo 
"<br />Hora actual menos 1 hora ".$fechamktime4;
echo 
"<br />".date("d/m/Y H:i"$fechamktime4); 
Controlo si paso mas de 1 hora
Código PHP:
$total=$fechamktime3-$algo1;
echo 
"<br />TOTAL: ".$total;
if(
$total >= "3660"){
echo 
"<br />Paso mas de 1 hora"
Buscaos el total de emails enviados desde $last (Ultimo email para invitar usuarios) y $last2 (ultimo email enviado general)
Código PHP:
$sql5="SELECT * FROM `email` WHERE clave BETWEEN $last AND $last2";
$resultado5=mysql_query($sql5) or die (mysql_error());
$counter=mysql_num_rows($resultado5);
echo 
"<br />Contador: ".$counter


$counter3 es el resultado que da la cantidad de emails que puedo enviar.
$counter2 son el total de emails que permite el hosting, a esto se le restan los ya enviados y el resultado es $counter3

Código PHP:
$counter2=180;//180 emails con un maximo de 200 por hora!
$counter3=$counter2-$counter;
echo 
"<br />last: ".$last;
echo 
"<br />last2: ".$last2;
echo 
"<br />counter: ".$counter;
echo 
"<br />counter2: ".$counter2;
echo 
"<br />counter3: ".$counter3
Busco en la bd en la tabla enviaemail las direcciones de emails a enviar y comienzo la iteracion
Código PHP:
$busc="SELECT * FROM enviaemail ORDER BY id ASC";
$resulta=mysql_query($busc)or die("error");
$contador=1;
while(
$resulta2=mysql_fetch_array($resulta) and $contador <= $counter3){

$email=$resulta2['email'];
enviar($email);
//echo "<br />".$contador." Enviado a: ".$email;
$id=$resulta2['id'];
eliminar($id);

$contador++;


y para enviar el email utilizo
Código PHP:
if(mail($to$subject$message$header)){
$fecha=date("d/m/Y H:i");
$motivo="Invitar";
$mensaje="Envio de email ";
$sql="INSERT ignore INTO email (de,para,asunto,mensaje,fecha)    VALUES ('$subject','$to','$motivo','$mensaje','$fecha')";
mysql_query($sql) or die("<div align=center><font color=\"#FF0000\">Error:</font> Hubo un error agregando algunos datos");

y ahi es donde creo que me toma mal la fecha date()


alguna idea de lo que puede ser?
si no me explique bien pregunten!

un abrazo
  #2 (permalink)  
Antiguo 07/10/2010, 22:11
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Dates y errores de fechas en BD

Y si en lugar de generar la hora con PHP, lo haces al momento de insertar a la BD, con now(), eso te tomaría la hora del servidor que tiene Mysql, por ende el tuyo y no el del usuario..
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #3 (permalink)  
Antiguo 08/10/2010, 05:18
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Dates y errores de fechas en BD

Hola silvanha.
Antes que nada agradecerte por la respuesta.

Sobre el now() de mysql lo acabo de probar, en estos momenos son las 08:14:10 del dia 2010-10-08, lo cual seria 2010-10-08 08:14:10, pero, modifique el reloj de la pc y me guarda esta fecha en la bd 2010-10-08 10:14:10 (2 horas mas, lo que yo lo adelante al reloj de mi pc) osea que tampoco me sirve :S

el codigo es este
Código PHP:
$sql="INSERT ignore INTO email (de,para,asunto,mensaje,fecha)    VALUES ('$subject','$to','$motivo','$mensaje',NOW())"
y estamos en el mismo caso que antes!

igualmente agradezco tu interes y la respuesta
  #4 (permalink)  
Antiguo 08/10/2010, 05:24
 
Fecha de Ingreso: julio-2009
Ubicación: Argentina!
Mensajes: 324
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Dates y errores de fechas en BD

Ahora anda bien! estamos todos locos!? WTF?

les comento, deje el escript como estaba antes
Código PHP:
$fecha=date("d/m/Y H:i");

$sql="INSERT ignore INTO email (de,para,asunto,mensaje,fecha)    VALUES ('$subject','$to','$motivo','$mensaje','$fecha')"
y tenia el reloj de la pc en las 10hs y me puso en la bd como las 08hs! anda bien pero no se q onda! cuando probe mi script en el sitio lo hice desde otra pc y me mando cualquier horario!

no entiendo mas nada!
  #5 (permalink)  
Antiguo 08/10/2010, 10:29
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Dates y errores de fechas en BD



eso es algo raro.. me parece que puedes establecer además la zona horaria desde la cual se supone esta trabajando tu script, en este caso sería con set_time_zone

eso también puede ayudarte creo , de porque te marca el horario que quiere o no, no estoy del todo segura..

ahí te sigo leyendo, me causa curiosidad tu caso
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)

Etiquetas: bd, fechas
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 07:15.