Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查日期是否在日期范围内_Php_Sql - Fatal编程技术网

Php 检查日期是否在日期范围内

Php 检查日期是否在日期范围内,php,sql,Php,Sql,我有一个数据库,里面有很多工作,有开始日期和结束日期。 我想做的是列出当前一周和未来20周,看看这些周是否在数据库中。 当我回显时,如果日期存在,我希望日期为绿色,如果不存在,则为黑色 它是有效的,但问题是它跳过了第一周。因此,如果我将2014-07-01作为开始日期,将2014-07-14作为结束日期,那么该示例中的第二周将变为绿色,而不是第一周 这就是我所做的: 更新 这是您的foreach循环每周$u的输出 2014-07-09 2014-07-16 2014-07-23 2014-07-

我有一个数据库,里面有很多工作,有开始日期和结束日期。 我想做的是列出当前一周和未来20周,看看这些周是否在数据库中。 当我回显时,如果日期存在,我希望日期为绿色,如果不存在,则为黑色

它是有效的,但问题是它跳过了第一周。因此,如果我将2014-07-01作为开始日期,将2014-07-14作为结束日期,那么该示例中的第二周将变为绿色,而不是第一周

这就是我所做的:

更新


这是您的foreach循环每周$u的输出

2014-07-09
2014-07-16
2014-07-23
2014-07-30
2014-08-06
2014-08-13
2014-08-20
2014-08-27
2014-09-03
2014-09-10
2014-09-17
2014-09-24
2014-10-01
2014-10-08
2014-10-15
2014-10-22
2014-10-29
2014-11-05
2014-11-12
2014-11-19
正如你所看到的,第二个超出了你的约会范围

试试这个循环

    //$first = 0;
    $last = 19;
    //$weeks = range($first, $last);
    $today = new \DateTime();
    $today->modify('Monday this week');

    for ($i=0; $i<$last; $i++) {        
        $the_week = $today->format('o-m-d');
        $sql = mysql_query("SELECT startDate,endDate FROM work WHERE $the_week BETWEEN startData AND endDate"); //what happend to your original query.
        $r = mysql_num_rows($sql);
        $row = mysql_fetch_array($sql);

        $startdate = $row['startDate'];
        $enddate = $row['endDate'];

       if(($startdate > $the_week) AND ($enddate < $the_week)) { 
           $color = "#69dd54;"; } else { $color = "#ffffff;";
       }

    echo "<span style='color: ". $color ."'>". $the_week ."</span>";
        $today->modify('next Monday');
    }
使用DateTime,您可以通过一个简单的for循环,以“下周一”或任何一天为单位递增

还要确保改变

$startdate = $ro['startDate'];
  $enddate = $ro['endDate'];

每周多少美元?这似乎是一个日期,但一周中有许多日期。例如,有一周的第一个日期和一周的最后一个日期。这里可能有一个有问题的边界条件

我假设,您希望开始日期在一周的最后一天之前,结束日期在一周的第一天之后。因此,第一周被排除在外,因为它的第一天在开始日期之前,而它的最后一天在开始日期之后

更新:

考虑:

$the_week = date('o-m-d', strtotime($today. ' + '. $week .' week'));
$the_week_last = date('o-m-d', strtotime($today. ($week +1) .' week'));

顺便说一下,我建议您为此执行一次SQL查询,而不是每周执行一次。有一个例子说明了如何做到这一点。

$每周是当前的一周+$周,因此从今天开始计算。同样的逻辑也适用于这里。总是有两个日期需要关注:一周的第一个日期和一周的最后一个日期。我现在更改了它,删除了between语句,并尝试使用if语句完成它,但仍然无法正确完成。再次查看,我认为我的开发服务器在德国时间lol,它落后了一天。此查询所做的只是每次都获取第一行。在它出错之前或之后,它现在与原来的情况不同,它是yada yada,yada之间$start_week的工作中的yada yada。每次编辑都会创建一个新问题,而从未修复原始问题。
$startdate = $ro['startDate'];
  $enddate = $ro['endDate'];
$startdate = $row['startDate'];
  $enddate = $row['endDate'];
$the_week = date('o-m-d', strtotime($today. ' + '. $week .' week'));
$the_week_last = date('o-m-d', strtotime($today. ($week +1) .' week'));