【问题标题】:Highlight previous week on calendar在日历上突出显示前一周
【发布时间】:2015-06-02 21:10:10
【问题描述】:

我有一个突出显示当前日期的日历。我想突出显示前一周,今天是 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 />";
  }
}

这是日历

【问题讨论】:

    标签: php date


    【解决方案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 />";
        }
    }
    

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

    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 />";
        }
    }
    

    【讨论】:

    • 一切正常,除非我从周日开始选择日期。如果点击 22,我得到的数字是 16 到 22 而不是 9 到 15,这是为什么呢?
    • 从 22 号开始的前一个星期一是 17 号,所以 16-22 是我所期望的。虽然听起来像是星期天,但你想要 2 周前,对吗?
    • 是的,所以我应该是 strtotime('monday last 2 weeks', $int);?
    • 不,因为您希望所有其他日子仍按一周处理(对吗?)。我会更新的。
    • 现在如果单击 22,它将显示从 17 到 23 而不是 9 到 15。我必须在前一周的行中添加一些样式。一周从星期一开始,到星期日结束。例如今天是 2015-03-30,那么日历会显示 23 到 29。有意义吗?
    【解决方案2】:
    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)并从当前日期中减去它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多