在日历上突出显示上周

时间:2015-03-29 23:37:47

标签: php date

我有这个日历,当前日期突出显示。我想强调前一周,今天是2015年3月30日所以突出显示的日期将是23到29.如果我从第一列(星期一)选择日期,但是当我点击时失败,脚本工作正常让我们说26,我得到的日期是19到25而不是16到22.任何想法?

if(isset($_GET['day'])) {

  for ($i = -7; $i < 0; $i++) {
    print date('Y-m-d', strtotime(str_replace('-','/', $_GET['day'])) + $i * 86400) . "<br />";
  }
}

这是日历 Calendar

2 个答案:

答案 0 :(得分:1)

if(isset($_GET['day'])) {
  $shift = (intval(date('w', strtotime($_GET['day']))) - 1)%7; 
  // Numeric representation of the day of the week, 0 for sunday -> need to sub 1 day
  for ($i = -7; $i < 0; $i++) {
    print date('Y-m-d', strtotime(str_replace('-','/', $_GET['day'])) + ($i - $shift) * 86400) . "<br />";
  }
}

它适用于您的情况。 基本思想是获取星期几(星期日=> 0)的数字表示,并从当前日期中减去它们。

答案 1 :(得分:1)

我想出你所关注的那周的第一个星期一,然后从那里输出日期。您的脚本目前不会考虑您在一周中的哪个位置只输出前7天。

if(!empty($_GET['day'])){
    $int = strtotime($_GET['day']);
    $firstmonday = strtotime('monday last week', $int);
    for($i = 0; $i < 7; $i++) {
        echo date('Y-m-d', $firstmonday + (86400 * $i)) . "<br />";
    }
}

由于星期日是特殊情况,我们可以检查请求的日期是否为一。

if(!empty($_GET['day'])){
    $int = strtotime($_GET['day']);
    $interval = (date('N', $int) == 7) ? '-2 week' : '-1 week';
    $firstmonday = strtotime($interval, $int);
    for($i = 1; $i < 8; $i++) {
        echo date('Y-m-d', $firstmonday + (86400 * $i)) . "<br />";
    }
}