【问题标题】:PHP, need to subtract 12 hours and 30 minutes from a DateTimePHP,需要从 DateTime 中减去 12 小时 30 分钟
【发布时间】:2011-08-11 17:58:42
【问题描述】:

我有一个 PHP DateTime 变量。

如何在 PHP 运行时从该日期缩短或减去 12 小时 30 分钟?

【问题讨论】:

  • 如果是 mysql,我会使用 DATE_SUB()
  • 您考虑选择一个答案吗?

标签: php datetime date


【解决方案1】:

我用在一条线上,只用了 12 个小时,只是作为一个小时显示

$date = new DateTime(); $date->modify('-12 hours'); echo $date->format('H')-0;

我使用了 -0,因为有时它会在数字前面放一个 0,除非我这样做,奇怪。

【讨论】:

    【解决方案2】:

    也许对某些情况有用

    $date = new DateTime();
    $date->modify('-12 hours -30 minutes');
    
    echo $date->format('H:i:s');
    

    【讨论】:

      【解决方案3】:

      如果您对像 PT12H30M 这样的 DateInterval 规范不太熟悉,您可以使用 DateInterval::createFromDateString 以更易于阅读的方式继续进行,如下所示:

      $date = new DateTime();
      $interval = DateInterval::createFromDateString('12 hour 30 minute');
      $date->sub($interval);
      

      或在子函数中直接间隔如下:

      $date = new DateTime();
      $date->sub(DateInterval::createFromDateString('12 hour 30 minute'));
      

      【讨论】:

        【解决方案4】:

        简单地使用strtotime

        echo date("Y-m-d H:i:s",strtotime("-12 hour -30 minutes"));
        

        使用DateTime

        $date = new DateTime("-12 hour -30 minutes");
        echo $date->format("Y-m-d H:i:s");
        

        【讨论】:

          【解决方案5】:

          尝试改用这个

          //set timezone
          date_default_timezone_set('GMT');
          
          //set an date and time to work with
          $start = '2014-06-01 14:00:00';
          
          //display the converted time
          echo date('Y-m-d H:i',strtotime('+1 hour +20 minutes',strtotime($start)));

          【讨论】:

            【解决方案6】:

            从 PHP 中的 DateTime 中减去 12 小时 30 分钟:

            $date = new DateTime();
            $tosub = new DateInterval('PT12H30M');
            $date->sub($tosub);
            

            P 代表周期。 T 代表时间跨度。

            请参阅 PHP 手册中的 DateTimeDateTime::subDateInterval。当然,您必须将DateTime 设置为适当的日期和时间。

            【讨论】:

              【解决方案7】:

              尝试:

              $date = new DateTime('Sat, 30 Apr 2011 05:00:00 -0400');
              echo $date->format('Y-m-d H:i:s') . "\n";
              $date->sub(new DateInterval('PT12H30M'));
              echo $date->format('Y-m-d H:i:s') . "\n";
              

              //结果

              2011-04-30 05:00:00
              2011-04-29 16:30:00
              

              【讨论】:

                【解决方案8】:

                试试strtotime()函数:

                $source_timestamp=strtotime("2011 年 4 月 30 日星期六 05:00:00 -0400");
                $new_timestamp=strtotime("-12 小时 30 分钟", $source_timestamp);
                打印日期('r', $new_timestamp);

                【讨论】:

                  【解决方案9】:

                  【讨论】:

                  • 在这种情况下这不是很有帮助。他真的应该使用DateTime 对象。
                  • 是的更新了它.. 实际上我在 datetime 对象上到处都看到了他的多个问题,所以这对他来说很方便。
                  【解决方案10】:

                  将其存储在DateTime 对象中,然后使用DateTime::sub 方法减去时间跨度。

                  【讨论】:

                    猜你喜欢
                    • 2011-08-12
                    • 2022-11-01
                    • 1970-01-01
                    • 2018-03-06
                    • 1970-01-01
                    • 2011-04-08
                    • 2011-01-19
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多