我想选择在本月和两个月后到期的名称。
$t=date('Y');
$q = date('m');
for($e=$q;$e<=($q+2);$e++){
$ren = $t.'-'.$e;
$sql = "select name,renewal_date from hosting_details where renewal_date LIKE '$ren%' ";
}
在第一个月显示正确,但随后没有给出任何结果。当我回应$ren时,第一个月它给出的是2016-01,第二个月是2016-2。我如何解决这个
您可以简单地使用sprintf()
来格式化数字。例如:
$t=date('Y');
$q = date('m');
for($e=$q;$e<=($q+2);$e++){
$ren = $t.'-'. sprintf("%'.02d", $e);
var_dump($ren);
}
有关sprintf()
的更多信息,请参阅文档。
但是,既然您使用的是日期,为什么不使用''DateTime对象并让它为您工作呢?这意味着你不必做任何日期溢出逻辑等-PHP为你做所有复杂的工作!:)例如
$begin = new DateTime( '2016-01-11' );
$numMonths = 2;
for($i=0; $i<$numMonths; $i++)
{
// e.g. increment the month and format the date.
var_dump($begin->modify( '+1 month' )->format("Y-m-d"));
// of course modify the format to "Y-m" for your code:
// $ren = $begin->modify( '+1 month')->format("Y-m");
}
要了解更多信息,您可以在PHP文档中签出''DateTime和''DatePeriod。
下面是一个比较这两种方法的工作示例。
使用sprintf()可以解决您的问题:
$t=date('Y');
$q = date('m');
for($e=$q;$e<=($q+2);$e++){
$ren = sprintf('%d-%02d', $t,$e);
$sql = "select name,renewal_date from hosting_details where renewal_date LIKE '$ren%' ";
echo $sql . "'n";
}
输出:
select name,renewal_date from hosting_details where renewal_date LIKE '2016-01%'
select name,renewal_date from hosting_details where renewal_date LIKE '2016-02%'
select name,renewal_date from hosting_details where renewal_date LIKE '2016-03%'