-1

我正在从我的数据库中提取 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 回答