-1

毎月の定期請求書がありますが、有効期限の6日前にその人にメールを送信したいのですが、すでに送信されている場合は再送信しないでください。PHPでの作業。現在、データベースには、payedUntilとsentReminderの2つの列があり、どちらもDATETIMEですが、必要に応じて変更できます。

したがって、擬似コードでは:

IF(between 6 days before expiration and expiration date AND reminder NOT sent)
  send reminder
  set that reminder was already sent
else
  if the month has past and time for new reminder, go back to top

来月、プロセス全体を再開します。人々はその月の1日、9日、または任意の日付に期限切れになる可能性があることに注意してください。助けてください!

編集: 私は基本的に、メンバーシップの有効期限が切れる6〜5日前に、毎月誰かにリマインダーを送信したいと思います。それで全部です。ここに私のコードの一部がありますが、最後のリマインダーを送信した時間が新しいリマインダーを生成するのに十分に経過したかどうかを確認する方法に悩まされ続けています...ここにすべてのコメントをお詫びします!!

        $paidUntil = strtotime($oneUser->paidUntil);
    $paidUntilMonthPrior = strtotime('-1 month', $paidUntil);

    $reminderSent = strtotime($oneUser->reminderSent);

    //$paidDateRemindRange = strtotime('-6 days', $paidUntil);      //6 days till u remind somebody
    $noNeedToSend = strtotime('+25 days', $reminderSent);

    //$paidDateReset = strtotime('+1 day', $paidUntil);

    //if($thisMonth==date('F',$paidUntil)) {
    //  $sameMonth=true;
    //}

    //if($todayTime>$paidDateReminder && $todayTime<$paidUntil && $todayTime>$reminderSent)
    //  $expirationRange=true;              

    if($todayTime < $noNeedToSend) {
        // is within 25 days from last sending - do nothing
    } 
    elseif($todayTime>$noNeedToSend && $todayTime<$paidUntil) {
        //is between 25 days and still less than the paid until time AND has not been sent this cycle
        // send expiration email and mark that its been sent
        $expirationRange=true;

    }
4

1 に答える 1

0

すべての優れたコードは、しっかりとした計画から始まると思います。そして、あなたはしっかりした計画を持っています。助けが必要ないようです。また、一般的には、コーディングを既に試して行き詰まった場合にのみ、質問に答えたいと考えています。

しかし、2 つの の違いを見つけるためのロジックを見逃しているのではないでしょうdatetimeか? その場合、以下に例を示します。

<?php
$datetime1 = new DateTime('2012-01-11');
$datetime2 = new DateTime('2012-01-13');
$interval = $datetime1->diff($datetime2);
?>
于 2012-04-05T21:19:32.763 に答える