【问题标题】:Add 1 year to Date and minus 1 Day at the same time将 1 年添加到日期并同时减去 1 天
【发布时间】:2013-09-04 14:28:43
【问题描述】:

将现有日期添加 1 年并删除 1 天的最佳方法是什么。因此,如果今天的日期是 2013 年 4 月 9 日,我希望有新的日期 2014 年 3 月 9 日。每 4 年也有一个问题,一年有 366 天而不是 365 天,当然如果开始日期是,它应该改变月份 01/09/2013 那么结束日期应该是 31/08/2014。请帮忙。我的日期字段看起来像这样。我想所以我必须对 mktime 或 time 做点什么?

$renewalDate = date('d F Y', strtotime($rows['CoverStartDate']));

【问题讨论】:

  • 这是否来自数据库,如果是,是哪一个?

标签: php date time


【解决方案1】:

DateTime() 表示闰年:

// PHP 5.2+
$dt = new DateTime($rows['CoverStartDate']);
$dt->modify('+1 year');
$dt->modify('-1 day');
$renewalDate  = $dt->format('d F Y');

或:

// PHP 5.3+
$dt = new DateTime($rows['CoverStartDate']);
$dt->add(new DateInterval('P1Y'));
$dt->sub(new DateInterval('P1D'));
$renewalDate  = $dt->format('d F Y');

或:

// PHP 5.5+
$renewalDate = (new DateTime('04/09/2013'))->add(new DateInterval('P1Y'))
                                           ->sub(new DateInterval('P1D'))
                                           ->format('d F Y');

【讨论】:

    【解决方案2】:

    尝试:

    $modificator = ' +1 year -1 day';
    $renewalDate = date('d F Y', strtotime($rows['CoverStartDate'] . $modificator));
    

    【讨论】:

      【解决方案3】:

      看看strtotime能做什么:

      <?php
      echo strtotime("now"), "\n";
      echo strtotime("10 September 2000"), "\n";
      echo strtotime("+1 day"), "\n";
      echo strtotime("+1 week"), "\n";
      echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
      echo strtotime("next Thursday"), "\n";
      echo strtotime("last Monday"), "\n";
      ?>
      

      (摘自官方PHP manual)。

      在你的情况下:

      $renewalDate = date('d F Y', strtotime($rows['CoverStartDate']));
      $desiredDate = date('d F Y', strtotime("{$renewalDate} + 1 year - 1 day"));
      echo $date;
      

      我自己试过的例子是:

      $date = date("d F Y");
      $date = strtotime("{$date} + 1 year - 1 day");
      $date = date("d F Y",$date);
      echo $date;
      

      并输出 2014 年 9 月 3 日,这是正确的。

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        从今天开始从一年中减去一天:今天 + 1年 - 1天

        $yearMinusOneDay = Date("Y-m-d h:i:s", strtotime("now"." +1 Year "."-1 day"));

        【讨论】:

          猜你喜欢
          • 2010-12-31
          • 2011-02-14
          • 1970-01-01
          • 2021-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多