【问题标题】:how can I get last week' date range in php?如何在 php 中获取上周的日期范围?
【发布时间】:2014-02-08 08:55:09
【问题描述】:

如何在 php 中获取上周的日期范围?

在下面查看我的代码:

<?php 
    function get_last_week_dates(){
        // how can i get the date range last week ?
        // ex: today is 2014-2-8
        // the week date range of last week should be '2014-1-26 ~ 2014-2-1'
    }
?>

【问题讨论】:

标签: php date


【解决方案1】:

简单地使用

date("m/d/Y", strtotime("last week monday"));
date("m/d/Y", strtotime("last week sunday"));

它将给出上周的星期一和星期日的日期。

【讨论】:

    【解决方案2】:

    你可以使用strtotime()

    $previous_week = strtotime("-1 week +1 day");
    
    $start_week = strtotime("last sunday midnight",$previous_week);
    $end_week = strtotime("next saturday",$start_week);
    
    $start_week = date("Y-m-d",$start_week);
    $end_week = date("Y-m-d",$end_week);
    
    echo $start_week.' '.$end_week ;
    

    更新

    更改了处理星期天的代码。如果当天是星期天,那么 - 1 周将是前一个星期天,再次获得前一个星期天,因为这将回到一周。

    $previous_week = strtotime("-1 week +1 day");
    

    另外如果我们需要找到current weeknext week的日期 我们可以做到的范围

    本周 -

    $d = strtotime("today");
    $start_week = strtotime("last sunday midnight",$d);
    $end_week = strtotime("next saturday",$d);
    $start = date("Y-m-d",$start_week); 
    $end = date("Y-m-d",$end_week);  
    

    下周-

    $d = strtotime("+1 week -1 day");
    $start_week = strtotime("last sunday midnight",$d);
    $end_week = strtotime("next saturday",$d);
    $start = date("Y-m-d",$start_week); 
    $end = date("Y-m-d",$end_week); 
    

    【讨论】:

    • 为什么加+1 day
    • 说今天是sunday 所以如果你做-1 week 然后它变成previous sunday 等等如果你做last sunday midnight 然后它会回到另一个previous sunday 所以添加@987654334 @ 所以如果今天是sunday 我会得到monday 并且在那个日期如果我这样做last sunday midnight 那么我将准确地得到从上周周日到下周六的开始日期
    • 周六运行此代码时问题仍然存在。
    • @wordpressure 您能否提供有关该问题的一些详细信息。
    • 我复制了您的代码以将它们粘贴到我的代码中,但它没有按预期工作。现在我发现我的问题要求与您的解决方案解决的问题有点不同。你的代码没问题到目前为止,我认为。很抱歉让你感到困惑。 :D
    【解决方案3】:

    这个会产生正确的结果并处理星期一的问题

    <?php
    $monday = strtotime("last monday");
    $monday = date('W', $monday)==date('W') ? $monday-7*86400 : $monday;
    
    $sunday = strtotime(date("Y-m-d",$monday)." +6 days");
    $this_week_sd = date("Y-m-d",$monday);
    $this_week_ed = date("Y-m-d",$sunday);
    
    echo "Last week range from $this_week_sd to $this_week_ed ";
    ?>
    

    【讨论】:

    • 如果 DST 在一周内发生变化,此操作将失败。
    • 这个也出于某种原因返回了 2018 年 12 月 29 日的开始日期,这是星期六而不是星期日。
    【解决方案4】:

    我知道这是旧的,但这里有一个更简洁的方法:

    $startDate = date("m/d/y", strtotime(date("w") ? "2 sundays ago" : "last sunday"));
    $endDate = date("m/d/y", strtotime("last saturday"));
    echo $startDate . " - " . $endDate
    

    【讨论】:

    • 由于某种原因,这将返回 2018 年 12 月 29 日的开始日期,这是星期六而不是星期日。
    • 也许你的 php.ini 没有正确的时区之类的。将代码粘贴到 phptester.net 中,显示 2018 年 12 月 30 日是星期日。
    • 有趣。你是对的。我的服务器上肯定有一些不同。
    • 我知道由于夏令时更改,您在加/减秒时可能会遇到问题。但是只要运行上面的代码应该可以正确计算。
    【解决方案5】:

    这应该可以解决问题

    $startWeek = date('Y-m-d',strtotime("Sunday Last Week"));
    $endWeek = date('Y-m-d',strtotime("Sunday This Week"));
    

    如果在星期一运行,这将不起作用。它将从上周日(前一天)到下周日。所以在上面使用 Abhik Chakraborty 的方法:

    $startTime = strtotime("last sunday midnight",$previous_week);
    $endTime = strtotime("next sunday midnight",$startTime);
    $startDate = date('Y-m-d 00:00:00',$startTime);
    $endDate = date('Y-m-d 23:59:59',$endTime);
    

    这将给

    start =  2014-08-10 00:00:00
    endDate = 2014-08-17 23:59:59
    

    【讨论】:

      【解决方案6】:

      您需要为此使用strtotime 函数

      <center>
      <?php
       function get_last_week_dates()
       {
              // how can i get the date range last week ?
              // ex: today is 2014-2-8
              // the week date range of last week should be '2014-1-26 ~ 2014-2-1'
      
              $startdate = "last monday";
              if (date('N') !== '1')
              { 
                  // it's not Monday today
                  $startdate .= " last week";
              }
              echo "<br />";
              $day = strtotime($startdate);
              echo date('r', $day);   
              echo "<br />";
              $sunday = strtotime('next monday', $day) - 1;
              echo date('r', $sunday);
          }
          get_last_week_dates();
      ?>
      </center>
      

      【讨论】:

        【解决方案7】:

        只是为了尝试解决这个问题的乐趣:

        date_default_timezone_set('UTC');
        $firstDayOfLastWeek = mktime(0,0,0,date("m"),date("d")-date("w")-7);
        $lastDayOfLastWeek = mktime(0,0,0,date("m"),date("d")-date("w")-1);
        echo("Last week began on: ".date("d.m.Y",$firstDayOfLastWeek));
        echo("<br>");
        echo("Last week ended on: ".date("d.m.Y",$lastDayOfLastWeek));
        

        【讨论】:

        • 我还没有测试过你无法解释的答案,但仅仅通过观察,我担心这会忽略mktime() 行中的年份部分。换句话说,我担心当减去天数将日期移至上一年时,这会中断。
        【解决方案8】:

        你可以这样做。

        首先获取当前时间戳并减去你想要的天数。

        $curTime = time();
        echo date("Y-m-d",$curTime);
        echo "<br />";
        echo date("Y-m-d",($curTime-(60*60*24*7)));
        

        【讨论】:

        • 这可能并不总是有效:以这种方式计算差异可能会在 DST 开始或结束时出现意外行为。
        【解决方案9】:
        $lastWeekStartTime = strtotime("last sunday",strtotime("-1 week"));
        $lastWeekEndTime = strtotime("this sunday",strtotime("-1 week"));
        $lastWeekStart = date("Y-m-d",$lastWeekStartTime);
        $lastWeekEnd = date("Y-m-d",$lastWeekEndTime);
        

        【讨论】:

        • 关闭,但这会返回两个星期日。一周从周日到周六。
        【解决方案10】:

        为了找到上周的开始日期和结束日期,您可以按照此代码进行操作。

        它适用于所有时间间隔以查找日期间隔。

        $Current = Date('N');
        $DaysToSunday = 7 - $Current;
        $DaysFromMonday = $Current - 1;
        $Sunday = Date('d/m/y', strtotime("+ {$DaysToSunday} Days"));
        $Monday = Date('d/m/y', strtotime("- {$DaysFromMonday} Days"));
        

        如果是这样,您需要使用datatime() 更改它,您可以执行此功能。

        $date = new DateTime();
        $weekday = $date->format('w');
        $diff = 7 + ($weekday == 0 ? 6 : $weekday - 1); // Monday=0, Sunday=6
        $date->modify("-$diff day");
        echo $date->format('Y-m-d') . ' - ';
        $date->modify('+6 day');
        echo $date->format('Y-m-d');
        

        使用函数:

        如果你想在函数的帮助下找到上周的范围,你可以像这样执行。

        功能:

        // returns last week's range
        function last_week_range($date) {
        $ts = strtotime("$date - 7 days");
        $start = (date('w', $ts) == 0) ? $ts : strtotime('last sunday', $ts);
        return array(
              date('Y-m-d', $start),
              date('Y-m-d', strtotime('next saturday', $start))
        );
        }
        

        用法:

        $today=date();
        print_r(last_week_range($today));
        

        上面给出的所有函数都将返回上周的范围,与一周的开始日期无关..

        【讨论】:

          【解决方案11】:

          提供的大多数其他解决方案都提前了一天。
          如果您想要上周的周日到周六,这就是这样做的方法。

          $start = date("Y-m-d",strtotime("last sunday",strtotime("-1 week")));
          $end = date("Y-m-d",strtotime("saturday",strtotime("-1 week")));
          
          echo $start. " to ".$end;
          

          【讨论】:

            【解决方案12】:

            $startOfTheWeek = Carbon::now()->subWeek(1)->startOfWeek();
            $endOfTheWeek = Carbon::now()->subWeek(1)->endOfWeek();
            

            从特定日期开始

            $startOfTheWeek = Carbon::parse('2020-03-02')->subWeek(1)->startOfWeek();
            $endOfTheWeek = Carbon::parse('2020-03-02')->subWeek(1)->endOfWeek();
            

            考虑到一周从星期一开始,到星期日结束。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-31
              • 2021-12-31
              • 1970-01-01
              • 2017-07-26
              • 2013-02-18
              • 2011-07-30
              • 2023-01-12
              • 1970-01-01
              相关资源
              最近更新 更多