【发布时间】:2015-05-28 02:41:56
【问题描述】:
我知道要在 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 新手,我想了解循环是如何工作的。为什么第二个循环只返回第一个日期?
【问题讨论】:
-
看来您已关闭错误报告,因为当我运行您的第二个循环代码时,它显示
E_NOTICE : type 8 -- A non well formed numeric value encountered。提示:它与循环无关,而是处理$i = strtotime('+1 day', $i)。提示提示:strtotime()不会返回像2015-05-01这样的日期 -
@Sean 我想知道为什么第一个返回两个日期之间的所有日期,而第二个只返回第一个日期
-
因为您的
$i = strtotime('+1 day', $i)导致您的循环失败。您在第一个循环$i = 2015-05-01上收到错误消息E_NOTICE : type 8 -- A non well formed numeric value encountered,但在第二个循环$i = 88415上收到错误消息,因此它不再采用Y-m-d的格式 -
您需要先使用
strtotime()将$i转换为时间戳,然后再将其转换回您的Y-m-d格式。有点乱,但你可以做$i = date('Y-m-d, strtotime('+1 day', strtotime($i)))
标签: php