我知道要在Php中显示两个日期之间的日期,我们可以使用此代码
$tsDateFrom = date('2015-05-01');
$tsDateTo = date('2015-05-07');
for($i=$tsDateFrom;$i<=$tsDateTo;$i++) {
echo $thisDate = $i."<br>" ;
}
显示器
2015-05-01
2015-05-02
2015-05-03
2015-05-04
2015-05-05
2015-05-06
2015-05-07
但是这个怎么样?
$tsDateFrom1 = date('2015-05-01');
$tsDateTo1 = date('2015-05-07');
for($i=$tsDateFrom1;$i<=$tsDateTo1;$i = strtotime('+1 day', $i)) {
echo $thisDate = $i."<br>";
}
显示
2015-05-01
我需要解释,因为我不熟悉php,我想学习循环是如何工作的。为什么第二个循环只返回第一个日期?
答案 0 :(得分:1)
首先,您没有正确使用date()
:
$d = date('2015-05-01');
这将根据您的模式格式化当前日期/时间,例如"Y-m-d"
,但由于缺少那些格式说明符,它只会返回您传递的内容,即字符串。
其次,strtotime()
期望第二个参数是时间戳,而不是字符串;当提供非数字字符串时,它会抱怨并返回你可能没想到的东西:
$ var_dump(strtotime('+1 day', '2015-05-07'));
PHP Notice: A non well formed numeric value encountered in php shell code on line 1
int(88415)
如您所见,它也不返回字符串,而是返回表示时间戳的整数值。
你可以这样写:
$d = date('Y-m-d', strtotime("$d +1 day"));
但是,在这种情况下,最好使用DatePeriod
代替:
$tsDateFrom = new DateTime('2015-05-01 00:00:00');
$tsDateTo = new DateTime('2015-05-07 23:59:59');
foreach (new DatePeriod($tsDateFrom, new DateInterval('P1D'), $tsDateTo) as $date) {
echo $date->format('Y-m-d'), '<br>';
}
答案 1 :(得分:0)
$i = strtotime('+1 day', $i)
返回一个整数,在$i<=$tsDateTo1
中无法比较。
也许$i=date('m-d-Y',strtotime($i. "+1 days"));
可行。
您可以查看PHP - add 1 day to date format mm-dd-yyyy ....它可能有用
答案 2 :(得分:0)
来自PHP文档:
int strtotime ( string $time [, int $now = time() ] )
该函数需要一个包含英文日期的字符串 格式并将尝试将该格式解析为Unix时间戳( 自1970年1月1日00:00:00 UTC以来的秒数,相对于 现在给出的时间戳,或者现在没有提供当前时间。
所以,例如:
echo(strtotime("+1 day"));
输出:
1432868203
然后,如您所见strtotime()
并不会以您期望的格式返回某些内容,因为您正在使用yy-mm-dd。
实际上,strtotime('+1 day', $i)
在您的代码中引发了错误,并且因为您的循环失败了。
两个建议: