使用PHP/mySQL,用戶每天都會被授予一個到其成員帳戶的單個整數點。我將用來確定一個點是否應該被授予的數據是這些mysql字段:創建日期(時間戳)和上次登錄(UNIX TIME)。每天授予用戶一分鐘
授予這些點的過程是在用戶登錄時確定的。我的問題是,確定自上次登錄以來已經過去多少天的最有效方法是什麼?其次,如果用戶每天登錄,我如何確定是否已經過了24小時,並且要授予一個積分?過去的天數等於給定的點數(每天1個)。
目前我使用此代碼:
/*
** 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'");
}
}
標記之外,很明顯我的代碼是短視的。如果用戶每天登錄一次,他們不會獲得一分。因此,我必須使用創建日期字段確定正確的方法。我今天無法圍住它,有什麼建議嗎?謝謝。
如果您只是在某個固定的時間點(例如午夜)給予積分,可能會更容易些。對於那些在12:01註冊的人與在11:59 pm註冊但在幾個月成員資格之後註冊的人,每個人都有些不公平,但是在幾個月的會員資格之後,這種差別是一個舍入誤差。 – 2010-09-03 19:09:07
永遠不要像你在這裏做的日期數學(也就是除以86400)。在任何一年,每天有一個23小時和一個25小時的日子。始終使用智能日期時間對象。否則就是在程序中編寫隱藏的錯誤。 – riwalk 2010-09-03 19:10:03
@ Stargazer712感謝您的提示,我從來沒有考慮過這個。 – mrtwidget 2010-09-03 19:23:18