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

时间:2014-07-08 23:21:45

标签: php sql

我有一个充满了大量工作的数据库,我有startDate和endDate。 我想要做的是列出当前周和未来20周,并查看这些周是否在数据库内。 当我回应它时,如果日期存在,我希望日期为绿色,否则为黑色。

它有效,但问题是它在第一周就会跳过。因此,如果我将2014-07-01作为startDate,将2014-07-14作为endDate,则该示例中的第二周将变为绿色,而不是第一周。

这就是我所做的:

已更新

$last = 19;
$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 startDate AND endDate'");
  $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>";
    $new_today->modify('next Monday');
}

2 个答案:

答案 0 :(得分:0)

这是$ the_week

的foreach循环的输出
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');
    }

输出

2014-07-07
2014-07-14
2014-07-21
2014-07-28
2014-08-04
2014-08-11
2014-08-18
2014-08-25
2014-09-01
2014-09-08
2014-09-15
2014-09-22
2014-09-29
2014-10-06
2014-10-13
2014-10-20
2014-10-27
2014-11-03
2014-11-10

使用DateTime,你可以通过一个简单的for循环在'下周一'或任何一天增加。

还要确保更改

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

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

答案 1 :(得分:0)

什么是$the_week?它似乎是一个约会,但一周内有很多日期。例如,有一周的第一个日期和一周的最后一个日期。这可能是你有一个有问题的边界条件。

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

<强>更新

考虑:

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

顺便说一句,我建议你为此做一个SQL查询,而不是每周一次。有一个如何执行此操作的示例here