1

私のサイトでは、ユーザーが毎日 23:59:59 の終わりまでにサイトで特定のタスクを完了する必要があります (タイムゾーンやタスクについて心配する必要はありません)。

タスクに$today_status(completeまたはincomplete)がある

2 つのことを行うために、1 日の開始時 (00:00:01) に実行される cron があります。

  1. すべてのタスクが昨日完了したかどうかを確認します (まだ完了していないすべてのタスクを確認します)。
  2. 昨日のタスクをすべてリセットして未完了に戻し、ユーザーが今日 (新しい日に) タスクを再開できるようにします。

各タスクの横にはカウントダウン タイマーが表示されるので、ユーザーは次の 2 つのタイマーのいずれかを確認できます。

  1. ( IF $today_status = incomplete) - タスクを完了するための残り時間 (1 日の終わりまでのカウントダウン)。
  2. ( IF $today_status = complete) - 2 番目のタスクを完了するまでに待機する必要がある時間 (1 日の終わりまでのカウントダウン)。

関連する2つの小さな問題があります。

cron は 00:00:01 に新しい日になるとすぐに実行されますが、cron は 00:07:19 まですべてのタスクの処理を終了しない可能性があるため、7 分のエラー ギャップがあります...これは次のように増加する可能性がありますより多くのユーザーが参加します。

そのため、ユーザーが前日のタスクを完了し、翌日の 00:03:27 にタスクを表示した場合... cron が前日のタスクを$today_statusまだcompleted処理していない可能性があるため、まだ可能性があります...そして、タイマーのためにそこに言うでしょう

23:54:33 (次のタスクを開始するまでの残り時間)

まだ「完了」ステータスであるため、上記のように表示されます...しかし、ユーザーは早くログインしたので、今日のタスクを早く完了することができましたが、サイトはそうではないと言っています...明日、次のタスクを完了するために...

これを正しく説明していることを願っています。ここまで読んでくれてありがとうございます...どんな助けでも大歓迎です...事前に感謝します

4

1 に答える 1

0

対処法しか思いつきません。cron はますます遅くなるため、「last_cron_date」フィールドを追加して、cron が特定のタスクを最後に修正した時期を示すことができます。したがって、UI では、タスクが cron TODAY によって渡されたかどうかを確認し、そうである場合は残りを表示します。cronがまだこのタスクに到達していない場合、その日付フィールドはまだ昨日のままであり、これを適切に処理できます-「このタスクは現在処理されています」と言うか、処理できるようにするか、ハンドリングタイムギャップ。

于 2012-12-06T15:58:30.820 に答える