我有一个充满了大量工作的数据库,我有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');
}
答案 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。