如何区分日期列表之间的天数? PHP

时间:2015-04-30 07:09:08

标签: php arrays date

我一直在努力列出我上学和没有学习的日子。

我在这里徘徊。另一个数组包含我没有去过学校的日子。

<?php
$fecha1 = "2015-03-10";
$fecha2 = date("Y-m-d",strtotime($fecha1."+ 10 days"));
$fecha3 = array("2015-03-11","2015-03-14","2015-03-17");
$j=1;

for($i=$fecha1;$i<$fecha2;$i = date("Y-m-d", strtotime($i ."+ 1 days"))){
    for ($n=0; $n <count($fecha3) ; $n++) { 
        if($i==$fecha3[$n]){
            $obs="not there";

        }else{
            $obs="there";       
        }
    }   
    echo "Day ".$j." ".$i."---".$obs."<br />";
    $j++;
}
?>

,输出

Day 1 2015-03-10---there
Day 2 2015-03-11---there
Day 3 2015-03-12---there
Day 4 2015-03-13---there
Day 5 2015-03-14---there
Day 6 2015-03-15---there
Day 7 2015-03-16---there
Day 8 2015-03-17---not there
Day 9 2015-03-18---there
Day 10 2015-03-19---there

我不明白为什么它不会说&#34;不存在&#34;在第2天2015-03-11 第5天2015-03-14,有人帮助我,我已经和他一起工作了好几个小时。

2 个答案:

答案 0 :(得分:3)

一旦找到针头,您应该添加break

if($i==$fecha3[$n]){
        $obs="not there";
        break; // this is important
    }else{
        $obs="there";
    }

另一个替代方案in_array()也可用于搜索:

if(in_array($i, $fecha3)){
    $obs="not there";
}else{
    $obs="there";
}

答案 1 :(得分:1)

这是因为2015-03-112015-03-14$fecha3数组中的前两个值,$obs在第二个for循环中被覆盖。

在这种情况下,我建议使用in_array()而不是第二个for循环:

$fecha1 = '2015-03-10';
$fecha2 = 10;
$fecha3 = array('2015-03-11', '2015-03-14', '2015-03-17');

for ($i = 0; $i < $fecha2; $i++) {
    $date = date('Y-m-d', strtotime($fecha1 . ' + ' . $i . ' days'));
    $obs = in_array($date, $fecha3) ? 'not there' : 'there';
    echo 'Day ' . ($i + 1) . ' ' . $date . '---' . $obs . '<br />';
}