2016-12-15 5 views
1

私はこれが意見に基づく質問だと知っていますが、私はあなたの意見が必要です。ユーザーの1日のメッセージ数を制限するにはどうすればよいですか?

私のアプリでは、ユーザーが毎日送信できるメッセージを制限したいと考えています。最初は、ユーザーが送信した最初のメッセージの日付を保存し、その日に制限すると考えました。

しかし、ユーザーの所在地と私のサーバーの所在地との時差はどうでしょうか。したがって、ユーザーがサーバーから5時間遅れている場合、サーバーのタイムゾーンが翌日になるまでユーザーはメッセージを送信できなくなり、ユーザーの視点からは5時間遅れます。

私は自分の携帯からユーザーのタイムゾーンを取得すると、タイムゾーンを変更して制限を簡単に破ることができます。

どのようにこの問題に取り組んでいますか?私はLaravel、MySQLを使用しています。

+0

意見ではありませんが、むしろオープンです。あなたがする必要があるかもしれないことは、あなたが数学をやっている時間を調整することができるように、誰かのタイムゾーンを(おそらくJavaScriptやユーザー設定を通して)把握することです。または、過去24時間以内に投稿された内容を見ることができます。いいえ、それは今日ではなく、あなたが正しい解決策を見つけるまでに最も近い...;) –

+0

過去24時間までに制限するのは簡単でした。それは私を悩ましている日付事 –

+1

あなたは本当に私の返信の最後のいくつかの単語を読むだけですか?理論的に(または仮説的に)求めているだけでした。この手法は、使用するフレームワークやデータベースに依存しません。私が言ったように、ユーザーのタイムゾーンを把握し、その日の始まりを知り、最初の+24時間の2番目のパラメータを追加する必要があります。 –

答えて

1

あなただけのカーボンの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のタイムゾーン方法を使用してユーザー時間を反映するようにサーバー時間を変更することもできます。 –

関連する問題