簡體   English   中英

比較從 MySQL 到 PHP 的日期

[英]Compare date from MySQL to date from PHP

我有一個 web 應用程序,用戶可以登錄它。 每次特定用戶登錄時,我都會將登錄日期時間存儲在 MySQL 數據庫中:

(yyyy-mm-dd hh-mm-ss) 

db 中的每條記錄都有一個 user_identifier 和 last_login_datetime。
但是,我想確保用戶每天只能登錄一次。
我正在考慮將 PHP 中的時間 function 與我在數據庫中的日期時間進行比較,看看用戶今天是否已經登錄。
如果用戶今天登錄,我會踢出他。

如何將數據庫中的記錄與 PHP 中的時間 function 進行比較,以查看用戶是否已經登錄?

謝謝!

您可以在SELECT的條件中添加類似的內容,以在用戶登錄時驗證用戶的憑據

... (AND DAY(last_login_datetime) != DAY(NOW()) OR MONTH(last_login_datetime) != MONTH(NOW()) OR YEAR(last_login_datetime) != YEAR(NOW()))

如果日、月或年與今天的日、月和年不匹配,則 select 將返回用戶(假設其他憑據/條件有效) 如果未返回任何結果,則說明用戶的憑據不正確用戶今天已經登錄 - 無論哪種方式,根據您的要求不應允許他們登錄。

我知道這不是您所要求的,但這可以通過嚴格的 SQL 來完成

SELECT * FROM table WHERE DATEDIFF(created_on, NOW()) <= -1

這將返回超過 1 天前登錄的所有用戶。 當然,您會將其限制為您想要的特定用戶,如果結果為空,則拒絕他們的登錄權限。

如果您出於某種原因需要比較 PHP 中的日期,那么了解 go 的最佳方法是使用DateTimeDateTimeZoneDateInterval類。

這樣做的原因是易於計算差異,從各種輸入日期構建日期 object,最重要的是 - 時區也被考慮在內,因此在處理夏令時時不會出錯。

如何:

$date = '2011-07-11 13:37:37';
$timezone = 'Europe/London';

$date = DateTime::createFromFormat('yyyy-mm-dd hh-mm-ss', $date, new DateTimeZone($timezone );
$now = new DateTime(time(), $timezone);

$diff = $date->diff($now); // You got the difference here. If the difference is less than 24h then attempt in the same day occurred.

if($diff->h < 24)
{
    // failure
}

如果您想在 PHP 中執行此操作,您可以使用 strtotime() 轉換為時間戳(自 1970 年 1 月 1 日以來的秒數),然后根據需要進行比較:

$time = strtotime($row['time']);

除了在數據庫方面完全做到這一點,因為它是可能的(並且可能更容易做到而不在 SQL 和 PHP 之間改組),在使用來自兩個不同平台的格式化時間戳時,最好的辦法是將兩個時間戳字符串轉換為統一的時間戳。

您可以使用strtotime()來做到這一點。 當我需要將 SQL 服務器時間戳與服務器時間戳進行比較時,我經常遇到這種情況,所以當我需要將它帶到 PHP 端時,我只需使用好的 ol strtotime()。

PHP 代碼段:

$today = date('Y-m-d');
$dbDate = new DateTime('2011-07-11 12:00:00'); // DB Date as parameter

if($today == date_format($dbDate,'Y-m-d'))
{
    ; // Magic
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM