Php 30天前计算

Php 30天前计算,php,mysql,function,triggers,cron,Php,Mysql,Function,Triggers,Cron,我正在从数据库中提取最近的计费日期。这是一个正常的时间戳。我想让系统检查一下时间戳是否在30天前。基本上,我们每30天给客户开一次账单。我想让它在日期正好是30天或超过30天时触发函数。这似乎不起作用。下面是我的一个时间戳的示例: 1339477200 下面是cron函数: $query = "SELECT * FROM contacts"; $result = mysql_query($query); wh

我正在从数据库中提取最近的计费日期。这是一个正常的时间戳。我想让系统检查一下时间戳是否在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);
                    }

                }
$query=“从联系人中选择*”;
$result=mysql\u query($query);
while($row=mysql\u fetch\u row($result)){
$id=$row[0];
$ownerID=$row[1];
$company=$row[4];
$lastBillDate=$row[36];
回显$lastBillDate。“
”;
如果($lastBillDate认为它只是一个数字,您可以在时间戳上使用普通算术:

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

if($timestamp - $thirtyDays <= $thirtyDaysAgo) {
    // Do your thang
}
$timestamp=1339477200;
$30天=(60*60*24*30)
$thirtyDaysAgo=time()-(60*60*24*30)

如果($timestamp-$thirtyDaysIMHO,那么最好将该条件放在SQL查询中

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

SELECT*FROM contacts WHERE last_bill_date在这种情况下可能无关紧要(尽管计费是一个我会小心的领域),但通常认为一天包含24小时、一小时60分钟或一分钟60秒是错误的。不要这样做!@Conrad谢谢你,这是一个很好的观点,尽管我同意在这种情况下这并不重要。@JamWaffles这似乎不起作用。.我尝试了SQL语句来扩展@alexn所说的内容,你可能应该使用
 mysql_fetch_assoc()
并使用其命名键获取列。例如:
$row['billDate']
如果您的MySQL列被称为
billDate
。您不应该真正使用
MySQL\u*
函数;它们已被弃用。请查看或。可能的重复项,但您应该真正让SQL处理此IMHO。另一个可能的重复项:这些答案都不起作用……我尝试过了,但没有显示。我知道时间戳上面显示的是过去的30天。没有显示任何内容。上面帖子(1339477200)中的时间戳是来自数据库的真实时间戳吗?在这种特殊情况下,时间戳转换为6月12日,而在撰写本文时(7月6日)不是30天前,因此该记录不会显示。
SELECT * FROM contacts WHERE last_bill_date <= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY))