【问题标题】:How do I remove 3 months from a date?如何从日期中删除 3 个月?
【发布时间】:2011-08-15 18:05:54
【问题描述】:

假设日期是:

$date = "2011-08-28";

它需要计算$date 之前的 3 个月 - 那怎么做?

【问题讨论】:

    标签: php date date-format


    【解决方案1】:
    $new_timestamp = strtotime('-3 months', strtotime($date));
    

    然后您可以使用新的时间戳和 php date() 函数来显示您希望的新日期,例如:

    echo date("Y-m-d",$new_timestamp);
    

    【讨论】:

      【解决方案2】:

      对我来说,这种方式更好,因为代码更具可读性。

      $datetime = Datetime::createFromFormat('Y-m-d', "2011-08-28");
      $datetime->modify('-3 months');
      echo $datetime->format('Y-m-d');
      

      编辑:我是个白痴。您可以按以下方式执行上述操作

      $datetime = new Datetime("2011-08-28");
      $datetime->modify('-3 months');
      echo $datetime->format('Y-m-d');
      

      【讨论】:

        【解决方案3】:

        edit:正如 calumbrodie 所指出的,您可以使用 sub 方法而不是反转间隔并将其添加到日期对象中


        我试图做一些类似于原始问题的事情。我需要从 DateTime 对象中减去 1 天。我知道其他解决方案有效,但这是我更喜欢的另一种方式。我使用了这个功能:

        function getPreviousDay($dateObject){
            $interval = new DateInterval('P1D');
            $dateObject->sub($interval);
            return $dateObject;
        }
        

        $dateObject 是一个 DateTime 对象,它可以有任何你不想要的日期,但由于我想要当前日期,我写道:

        $dateObject = new DateTime('now');
        

        我的函数的作用是从它收到的日期中减去 1 天,但您可以对其进行修改,使其减去 3 个月,修改 DateInterval 构造函数,如下所示:

        $interval = new DateInterval('P3M');
        $dateObject->sub($interval);
        return $dateObject;
        

        您可以在此处找到关于 DateInterval 构造函数中使用的字符串格式的说明

        DateInterval constructor documentation

        您将看到字母“P”(句点)是强制性的,您使用 int 指定句点长度,然后指定句点类型,在月份“M”的情况下。看起来好像文档中有错误,它说“M”使用了几个月和几分钟,但实际上可以工作几个月。如果您需要使用分钟,则必须指定“PTM”,例如“PT3M”表示 3 分钟,在表格之外它说您必须使用“T”标识符表示时间间隔。

        编辑: 举一个完整的例子,你必须使用这个格式来表示一个完整的日期时间间隔:

        $format = 'P1Y2M4DT2H1M40S';
        

        这将表示 1 年 2 个月 4 天 2 小时 1 分钟 40 秒的间隔

        希望这对某人有所帮助

        【讨论】:

        • 你可以做 $dateObject->sub($interval);并跳过反转之前的行。
        • 是的,你是对的,之前没有看到 sub 方法。我会编辑答案
        【解决方案4】:
        <?php
        $threemonthsago = mktime(0, 0, 0, date("m")-3, date("d"),   date("Y"));
        ?>
        

        【讨论】:

          【解决方案5】:
          <?php
          $date = date_create('2000-01-01');
          date_add($date, date_interval_create_from_date_string('10 days'));
          echo date_format($date, 'Y-m-d');
          ?>
          

          【讨论】:

            猜你喜欢
            • 2017-06-13
            • 1970-01-01
            • 2011-11-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多