如何以两位数显示数字

时间:2016-01-11 10:01:57

标签: php

我想选择在本月和未来两个月过期的名字。

  $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第二个月的第一个月。 我怎么解决这个

2 个答案:

答案 0 :(得分:1)

您只需使用sprintf()格式化数字即可。例如:

$t=date('Y');
$q = date('m');

for($e=$q;$e<=($q+2);$e++){
  $ren = $t.'-'. sprintf("%'.02d", $e);
  var_dump($ren);
}

有关sprintf()的更多信息,请in the docs

但是,既然您正在处理日期,为什么不使用\ 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

这里有working example比较两种方法。

答案 1 :(得分:0)

使用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%'