我从我的数据库中提取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);
}
}
答案 0 :(得分:3)
恕我直言,最好将这个标准放在SQL查询中。
SELECT * FROM contacts WHERE last_bill_date <= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY))
这将仅返回距离今天30天或更长时间last_bill_date
的联系人。然后执行您需要的任何处理,向客户收费,并更新时间戳。
答案 1 :(得分: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))