PHP日期减去X天

4

我有这段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天的日期。


1
$_POST["date"]的格式是什么?是"Y-m-d"吗?还是时间戳? - Comum
你为什么要用PHP做这个?SELECT DATE_SUB('1998-01-02', INTERVAL 7 DAY); 参见:http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-add - donald123
date(strtotime(date($_POST["date"] . ' -7 days')); 的含义是什么? - putvande
@putvande 这样会行吗?我认为你仍需要添加 date("Y-m-d", strtotime(date($_POST["date"] . ' -7 days')); 或者在 OP 的情况下 date($_POST["date"], strtotime(date($_POST["date"] . ' -7 days')); - Comum
使用如下内容的编程:<?php $strtotime = strtotime($_POST['date']); date('Y-m-d',strtotime('-7 days',$strtotime)); ?> - Ranjeet Singh
4个回答

9
根据PHP手册中strtotime的说明,有第二个参数可以指定一个时间戳来代替当前时间。
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"])))

0

使用

INTERVEL

$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 ";

0

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 ";

0
您可以在MySQL中使用DATE_SUB / INTERVAL函数来执行此检查。
*注意 - 确保转义输入到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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接