-1

DB から lastBillingDate を取得しています。通常のタイムスタンプです。タイムスタンプが 30 日前かどうかをシステムに確認させたい。基本的に、30日ごとにお客様に請求します。私が望むのは、日付がちょうど 30 日、または 30 日を超えたときに関数をトリガーすることです。これは機能していないようです。これも私のタイムスタンプの例です:

1339477200

cron 関数は次のとおりです。

    $query = "SELECT * FROM contacts";
                $result = mysql_query($query);      

                while($row = mysql_fetch_row($result)){

                        $id = $row[0];
                        $ownerID = $row[1];
                        $company = $row[4];
                        $lastBillDate = $row[36];

                        echo $lastBillDate.'<br>';

                    if($lastBillDate<strtotime('-30 days')){
                        $billdate = RelativeTime($lastBillDate);

                                    mailBillNotice($id, $ownerID, $company, $billdate);
                    }

                }
4

2 に答える 2

3

私見、その基準をSQLクエリに入れる方が良いでしょう。

SELECT * FROM contacts WHERE last_bill_date <= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY))

last_bill_dateこれにより、今日から 30 日以上前の連絡先のみが返されます。次に、必要な処理を行い、クライアントに請求し、タイムスタンプを更新します。

于 2012-07-06T18:03:43.517 に答える
2

単なる数値であるため、タイムスタンプに通常の算術演算を使用できます。

$timestamp = 1339477200;
$thirtyDays = (60 * 60 * 24 * 30)
$thirtyDaysAgo = time() - (60 * 60 * 24 * 30)

if($timestamp - $thirtyDays <= $thirtyDaysAgo) {
    // Do your thang
}

ただし、MySQL で実行する方がはるかに賢明です。データベースから余分な行をフェッチするオーバーヘッドがなくなります。これを試して:

SELECT * FROM contacts 
WHERE 
    last_bill_date <= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY))
于 2012-07-06T17:59:03.827 に答える