Al usar PHP/mySQL, a un usuario se le concede un único punto entero a su cuenta de miembro cada día. Los datos que utilizaré para determinar si se debe otorgar un punto son estos campos mysql: Fecha de creación (indicación de fecha y hora) y Último inicio de sesión (hora UNIX).Otorgar usuario un punto cada día
El procedimiento para otorgar estos puntos se determina cuando el usuario inicia sesión. Mi pregunta es, ¿cuál es la forma más eficiente de determinar cuántos días han pasado desde el último inicio de sesión? En segundo lugar, si un usuario inicia sesión cada día, ¿cómo puedo determinar si han pasado 24 horas y se ha otorgado un punto? Los días pasados son iguales a los puntos dados (1 por día).
Actualmente estoy usando este código:
/*
** Updates Points based on days since last visit
*/
static function UpdatePoints($username)
{
$getlog = System::$mySQL->Select("lastLog, creation FROM users WHERE username='$username'");
$log = System::$mySQL->Fetch($getlog);
$offset = (TIME() - $log['lastLog'])/86400; // 24hrs
$lastlog = round($offset); // in days
if($lastlog > 0)
{
System::$mySQL->Update("users SET points=points+".$lastlog." WHERE username='$username'");
}
}
marcado un lado, es obvio que mi código es miope. Si el usuario inicia sesión una vez al día, no gana un punto. Por lo tanto, debo determinar el método correcto para hacerlo usando también el campo Fecha de creación. No puedo entenderlo hoy, ¿alguna sugerencia? Gracias.
Podría ser más fácil si acaba de otorgar los puntos en un punto fijo en el tiempo, por ejemplo, a la medianoche. Tan levemente injusto para aquellos que se registran a las 12:01 a.m. contra alguien que se registra a las 11:59 p.m., pero después de algunos meses de membresía, ese tipo de diferencia es un error de redondeo. –
NUNCA feche las matemáticas como lo ha hecho aquí (es decir, dividiendo entre 86400). En un año determinado, hay un día de 23 horas y un día de 25 horas. Utilice siempre un objeto inteligente de fecha y hora. Hacer lo contrario es programar errores ocultos en su programa. – riwalk
@ Stargazer712 Gracias por la sugerencia, nunca lo consideré. – mrtwidget