【问题标题】:php - find date for same day of week for last yearphp - 查找去年一周中同一天的日期
【发布时间】:2012-01-24 00:09:54
【问题描述】:

因此,在 PHP 中,我试图根据一周中的同一天返回去年的日期值。 例如:(星期一)2011-12-19 输入应该返回(星期一)2010-12-20。

我只是简单地通过 -364 执行此操作,但在闰年却失败了。我遇到了另一个功能:

$newDate = $_POST['date'];
$newDate = strtotime($newDate);
$oldDate = strtotime('-1 year',$newDate);

$newDayOfWeek = date('w',$oldDate);
$oldDayOfWeek = date('w',$newDate);
$dayDiff = $oldDayOfWeek-$newDayOfWeek;

$oldDate = strtotime("$dayDiff days",$oldDate);

echo 'LAST YEAR DAY OF WEEK DATE = ' . date('Ymd', $oldDate);

但是,当您尝试输入星期日日期时,它会失败,因为它会输入 0(星期日)减去 6(去年日期的星期六),并返回值 T-6。 IE 输入 2011-12-25 会得到 2010-12-19 而不是 2011-12-26。

我很难在 php 中找到一个适用于闰年和一周中所有日子的好的解决方案。

有什么建议吗?

谢谢!

【问题讨论】:

    标签: php date


    【解决方案1】:

    这个怎么样,使用 PHP 的 DateTime 功能:

    $date = new DateTime('2011-12-25');  // make a new DateTime instance with the starting date
    
    $day = $date->format('l');           // get the name of the day we want
    
    $date->sub(new DateInterval('P1Y')); // go back a year
    $date->modify('next ' . $day);       // from this point, go to the next $day
    echo $date->format('Ymd'), "\n";     // ouput the date
    

    【讨论】:

    • @andrewjackson 工作正常。 2012-12-252011-12-27
    【解决方案2】:

    使用 strtotime() 获取去年同一周的日期。

    使用格式 {$year}-W{$week}-{$weekday},如下所示:

    echo date("Y-m-d", strtotime("2010-W12-1"));
    

    只要你不想这样做,你就可以这样做:

    <?php
    
      for($i = 2011; $i > 2000; $i--)
        echo date("Y-m-d", strtotime($i."-W12-1"));
    
    ?>
    

    【讨论】:

      【解决方案3】:
      $newDate = '2011-12-19';
      
      date_default_timezone_set('UTC');
      $newDate = strtotime($newDate);
      $oldDate = strtotime('last year', $newDate);
      $oldDate = strtotime(date('l', $newDate), $oldDate);
      
      $dateFormat = 'Y-m-d l w W';
      
      echo "This date: ", date($dateFormat, $newDate), "\n"; 
      echo "Old date : ", date($dateFormat, $oldDate);
      

      这给了:

      This date: 2011-12-19 Monday 1 51
      Old date : 2010-12-20 Monday 1 51
      

      【讨论】:

        【解决方案4】:

        让它更容易:)

        echo date('Y-m-d (l, W)').<br/>;
        echo date('Y-m-d (l, W)', strtotime("-52 week"));
        

        编辑:我忘了写输出::)

        2015-05-06 (Wednesday, 19)
        2014-05-07 (Wednesday, 19)
        

        【讨论】:

          【解决方案5】:
          <?php
              $date = "2020-01-11";
              $newdate = date("Y-m-d",strtotime ( '-1 year' , strtotime ( $date ) )) ;
              echo $newdate;
          ?>
          

          参考https://www.nicesnippets.com/blog/how-to-get-previous-year-from-date-in-php

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-08-24
            • 1970-01-01
            • 2021-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多