【问题标题】:PHP: How to get Sunday and Saturday given a date input?PHP:如何在给定日期输入的情况下获得周日和周六?
【发布时间】:2009-09-28 04:57:19
【问题描述】:

在给定特定日期的情况下,如何获取一周中的星期日和星期六?

例如:

输入:2009 年 9 月 28 日,星期一

输出应该是:

2009 年 9 月 27 日星期日上午 12:00 - 2009 年 10 月 3 日星期六晚上 11:59

我正在考虑使用datestrtotimemktimetime php 函数。

如果你有可用的功能,那我也可以。

提前致谢:)

干杯, 标记

【问题讨论】:

    标签: php algorithm datetime


    【解决方案1】:

    你使用strtotime()date()

    <?php
    $s = 'Monday, September 28, 2009';
    $time = strtotime($s);
    $start = strtotime('last sunday, 12pm', $time);
    $end = strtotime('next saturday, 11:59am', $time);
    $format = 'l, F j, Y g:i A';
    $start_day = date($format, $start);
    $end_day = date($format, $end);
    header('Content-Type: text/plain');
    echo "Input: $s\nOutput: $start_day - $end_day";
    ?>
    

    输出:

    Input: Monday, September 28, 2009
    Output: Sunday, September 27, 2009 12:00 PM - Saturday, October 3, 2009 11:59 AM
    

    【讨论】:

    • 感谢克莱图斯先生。我认为这在我看来更具可读性和更易于使用:)
    • 感谢先生的解决方案!
    【解决方案2】:
    <?php
    
    date_default_timezone_set('Europe/London');
    
    $datetime = new DateTime("2009-09-23 12:00:00");
    
    // Saturday
    $datetime->setISODate(2009, $datetime->format("W"), 6);
    print "Saturday:" . $datetime->format(DATE_ATOM) . "\n";
    // Sunday
    $datetime->setISODate(2009, $datetime->format("W"), 0);
    print "Sunday: " . $datetime->format(DATE_ATOM) . "\n";
    
    
    ?>
    

    【讨论】:

    • 很好,DateTime 相对较新 - 不是吗?
    • @meder:在 2006 年末发布的 5.2 中默认可用。它在 PECL 上为 5.1 提供。
    【解决方案3】:

    看看strtotime

    strtotime('next sunday', strtotime($your_date_string));
    

    【讨论】:

      【解决方案4】:

      echo date("Y-m-d H:i:s", strtotime("last Sunday", time()));

      echo date("Y-m-d H:i:s", strtotime("下一个星期六", time()));

      【讨论】:

        【解决方案5】:

        “正确”答案的问题是,如果提供的日期是星期日怎么办?然后它将为您提供前一个星期日,而不是当前星期日。周六也有同样的问题。

        $s = 'Monday, September 28, 2009';
        $time = strtotime($s);
        if(date('D', $time) == "Sun"){
            $start = strtotime(' 12pm', $time);
        }
        else {
            $start = strtotime('last sunday, 12pm', $time);
        }
        if(date('D', $time) == "Sat"){
            $start = strtotime(' 12pm', $time);
        }
        else {
            $start = strtotime('next saturday, 12pm', $time);
        }
        $format = 'l, F j, Y g:i A';
        $start_day = date($format, $start);
        $end_day = date($format, $end);
        header('Content-Type: text/plain');
        echo "Input: $s\nOutput: $start_day - $end_day";
        

        【讨论】:

        • 我来这里是为了寻找这个细微差别:我的周末界限是错误的,因为你指出的(并且只在周末测试时看到这个!)。您使用 12pm 一天的边界而不是午夜(12am)是否有原因?
        • 看来我可能已经复制并粘贴了部分原始答案并进行了必要的更改。除此之外,目前我想不出任何其他理由。
        【解决方案6】:

        strtotime

        $input = strtotime("Monday, September 28, 2009");
        $nextSunday = strtotime("next Sunday",$input);
        

        【讨论】:

          【解决方案7】:
          <?php
          
          $date = strtotime('Monday, September 28, 2009 - 1 day');
          $initialString =  date('l, F d, Y g:i A', $date);
          $end = date('l, F d, Y g:i A', strtotime( 'next saturday 11:59 pm', $date));
          
          echo $initialString . ' - ' . $end; 
          

          输出: 2009 年 9 月 27 日星期日 12:00 AM - 2009 年 10 月 3 日星期六 11:59 PM

          【讨论】:

            【解决方案8】:

            这就是您要找的。这是我用的。

            $beginningOfWeek = date('Y-m-d H:i:s', strtotime('last Sunday'));
            $endOfWeek = date('Y-m-d H:i:s', strtotime('+6 day', strtotime('last Sunday')) );
            

            【讨论】:

              【解决方案9】:

              在这种情况下,您可能会发现我的日期时间助手非常方便,它可以在 3 行内完成

              http://normandqq.github.io/Date-Time-Helper/

                  $date = '2013-08-11';
                  $monday = Model_DTHpr::getMondayByDate($date);
                  $sunday = Model_DTHpr::adjustDays("add",$monday,6);
              

              输出:

                  2013-08-05 //Monday
                  2013-08-11 //Sunday
              

              【讨论】:

                【解决方案10】:

                获取周日 PHP 代码:

                echo "Today Is : " . date("d-m-Y"); 
                $dw = date( "w");
                $dw = 7-$dw;
                echo "\nNext Sunday Is" .date('d-m-Y', strtotime("+$dw days")); 
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-06-12
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-01-20
                  相关资源
                  最近更新 更多