[英]PHP date minus X days
我在PHP中有以下代码:
date('Y-m-d', strtotime("-7 days"))
我在SQL查询中使用的:
$sql="SELECT * from billing_invoices WHERE due_date <= '".date('Y-m-d', strtotime("-7 days"))."' AND (status = 'Unpaid' or status = 'Part Paid') AND statement = '0000-00-00 00:00:00' group by customer_sequence ";
因此,如果日期是2014-12-16
,它将显示2014-12-09
我也希望能够运行此查询:
$sql="SELECT * from billing_invoices WHERE due_date <= '".date($_POST["date"], strtotime("-7 days"))."' AND (status = 'Unpaid' or status = 'Part Paid') AND statement = '0000-00-00 00:00:00' group by customer_sequence ";
但是返回的日期是当前日期,而不是从POSTED
日期开始的-7天
根据用于strtotime的PHP手册,还有第二个参数,您可以在其中指定时间戳记,然后使用该时间戳记代替当前时间
int strtotime ( string $time [, int $now ] )
因此,您的代码应如下所示:
date("Y-m-d", strtotime("-7 days", $_POST["date"]))
也许您之前必须将日期转换为时间戳。 根据您$_POST["date"]
日期格式,此方法可能有效:
date("Y-m-d", strtotime("-7 days", strtotime($_POST["date"])))
采用
互动
$sql="SELECT * from billing_invoices WHERE DATE_SUB(due_date , INTERVAL -7 DAY)' AND (status = 'Unpaid' or status = 'Part Paid') AND statement = '0000-00-00 00:00:00' group by customer_sequence ";
要么
$sql="SELECT * from billing_invoices WHERE DATE_SUB(now(), INTERVAL -7 DAY)' AND (status = 'Unpaid' or status = 'Part Paid') AND statement = '0000-00-00 00:00:00' group by customer_sequence ";
SQL不知道什么date($_POST["date"], strtotime("-7 days"))
...。因此您可以使用此日期...
$sql="SELECT * from billing_invoices WHERE due_date <= '".DATE_SUB(CURDATE(),INTERVAL 30 DAY)."' AND (status = 'Unpaid' or status = 'Part Paid') AND statement = '0000-00-00 00:00:00' group by customer_sequence ";
您可以在MySQL中使用DATE_SUB / INTERVAL函数执行此检查。
* NB。 -确保您对输入到SQL中的值进行转义。
$sql="SELECT *
FROM billing_invoices
WHERE due_date <= DATE(DATE_SUB(".$_POST['date'].", INTERVAL -7 DAY))
AND (status = 'Unpaid' OR status = 'Part Paid')
AND statement = '0000-00-00 00:00:00'
GROUP BY customer_sequence;";
您可以在此处找到有关使用DATE_SUB / INTERVAL的更多信息: http : //dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.