2016-12-15 85 views
1

我知道這是一個基於意見的問題,但我需要你的意見。我如何限制用戶的每天消息?

在我的應用程序中,我想限制用戶每天可以發送的消息。起初我以爲我會存儲用戶發送的第一條消息的日期,並限制他/她的那一天。

但是,用戶位置和我的服務器位置之間的時差呢?因此,如果我的用戶比服務器提前5小時,用戶將無法發送任何消息,直到服務器時區到達第二天,這是從用戶的角度來看有5小時的延遲。

如果我從他們的手機獲取用戶時區,他們可以改變他們的時區並輕鬆突破極限。

那麼我該如何解決這個問題呢?我正在使用Laravel,MySQL。

+0

不是真的意見,但它是相當開放的。你可能需要做的是找出某人的時區(可能是通過javascript或用戶設置),這樣你就可以調整你正在進行數學計算的時間。或者您可以查看過去24小時內發佈的內容。不,這不是一天一天,但最接近,直到你找到正確的解決方案...;) –

+0

限制過去24小時本來很容易。它的日期是讓我煩惱的東西 –

+1

你真的只會讀到我回復的最後幾個字嗎?你只是在理論上(或假設地)提出要求。該技術不依賴於您使用的框架和數據庫。就像我說過的,你需要弄清楚用戶的時區,弄清楚他/她今天開始的時間,並添加第二個參數,即開始時間+ 24小時... –

回答

1

可以使用算了算最後一天的消息Carbon的subDays()subHours()

$numberOfMessages = Message::where('user_id', 1) 
    ->where('created_at', '>', Carbon::now()->subDays(1))->count(); 
if ($numberOfMessages >= $dailyLimit) { 
    return; 
} 

這會爲你工作,如果你只是想限制郵件的數量過去24小時。如果您關心每個用戶的日曆日(當每個用戶具有不同的時區時),這將不起作用。

+0

追蹤過去24小時很容易。我必須在每天早上12點重置限制,針對每個用戶,從不同時區開始:( –

+0

)您還可以允許用戶設置其時區並使用Carbon的時區方法來更改服務器時間以反映用戶時間。 –