【问题标题】:php - add two hours to date variablephp - 添加两个小时的日期变量
【发布时间】:2011-10-18 17:57:45
【问题描述】:

我想将 3 分钟添加到我拥有的日期/时间变量,但我不确定如何执行此操作。 我用这样的字符串创建了变量:(顺便说一句,它采用 RFC 2822 日期格式)

$date = 2011-10-18T19:56:00+0200

我使用以下命令将该字符串转换为日期:

$time = date_format(DateTime::createFromFormat("Y-m-d\TH:i:sO", $date), "G:i")

现在,我想为该变量添加 3 分钟,但我不确定如何操作。 我之前在我的脚本中使用过以下命令,但这适用于当前日期/时间,所以我不确定如何将它用于我的时间变量:

$currenttime = date('G:i', strtotime('+2 hours'));

那么,如何将三分钟添加到 $time 变量?

【问题讨论】:

    标签: php date add strtotime


    【解决方案1】:
    echo $idate="2013-09-25 09:29:44";
    
    $effectiveDate = strtotime("+40 minutes", strtotime($idate));
    
    echo date("Y-m-d h:i:s",$effectiveDate);
    

    【讨论】:

      【解决方案2】:

      使用strtotime的第二个参数提供参考时间:

      $date_rfc2822 = '2011-10-18T19:56:00+0200';
      $dateTime = DateTime::createFromFormat("Y-m-d\TH:i:sO", $date_rfc2822);
      echo date('G:i', strtotime('+2 hours', $dateTime->getTimestamp()));
      

      【讨论】:

      • 这不是我想要的,我只是想通了,因为它需要当前时间并增加 3 分钟,它没有从 $datetime 变量中获取时间......我正确吗?跨度>
      • @laarks 不,当前时间不在任何地方使用。请注意,这个确切的演示程序(以<?php 为前缀时)始终输出21:56,无论它是什么时间。
      • 嗯,我想你是对的。但我已经得到了另一个修复:我使用了 strtotime 两次 :) 日期也很好 [来自:stackoverflow.com/questions/7812112/…
      【解决方案3】:

      既然您已经在使用 DateTime 对象,请坚持使用它:

      $time = DateTime::createFromFormat("Y-m-d\TH:i:sO", $date);
      $three_minutes = $time->add(new DateInterval('P2H'));
                                                     ^^--two (2) hours (H)
      

      【讨论】:

      • 一个更好的解决方案,因为我不想修改当前时间,非常感谢!
      • 不幸的是,我不能让它工作...... :S 我现在是这样的,:echo 'Arrival: '.date_format($time, 'G:i').'<br \>'."\n";echo 'Departure: ';echo ( $time->add(new DateInterval('P2H')) );echo '<br \><br \>'."\n"; 但页面停在出发回声...
      • 字符串格式不正确。你需要使用 $time->add(new DateInterval('PT2H'));
      【解决方案4】:

      格式以字母 P 开头,表示“句号”。每个持续时间段由一个整数值表示,后跟一个时间段指示符。如果持续时间包含时间元素,则规范的该部分以字母 T 开头。

      http://www.php.net/manual/en/dateinterval.construct.php

      话虽如此,我对类似问题的解决方案是这样的:

      // pretend that $date is what you got from mysql
      // which is like 2013-02-12 23:08:17
      echo "<br>";
      echo $date;
      $time = DateTime::createFromFormat("Y-m-d H:i:s", $date);
      echo "<br>";
      echo $time->format('H-i-s');
      $time->add(new DateInterval('PT2H'));
      echo "<br>";
      echo $time->format('H-i-s');
      // Outputs:
      // 2013-02-12 23:08:17
      // 23-08-17
      // 01-08-17
      

      问题是在使用DateInterval 类时添加P,并在时间条目之前添加T。对于您的情况,您需要使用 PT3M 进行 3 分钟添加。我试图增加 2 小时,而我所做的是$time-&gt;add(new DateInterval('PT2H'));

      如果您想查看间隔规格:

      Y   years
      M   months
      D   days
      W   weeks. These get converted into days, so can not be combined with D.
      H   hours
      M   minutes
      S   seconds
      

      M 对应于monthsM 对应于minutes。这就是为什么前面有一个T

      至少那是我愿意相信的......'O_O

      【讨论】:

        【解决方案5】:
        //set the date and time
        
        $start = '2017-01-01 14:00:00';
        
        //display the converted time you want to add for ex. 1 hour and 20 minutes 
        
        echo date('Y-m-d H:i:s',strtotime('+1 hour +20 minutes',strtotime($start)));
        

        【讨论】:

          猜你喜欢
          • 2019-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多