【问题标题】:Adding minutes to date time in PHP在 PHP 中添加分钟到日期时间
【发布时间】:2011-12-31 10:23:37
【问题描述】:

在进行大量 google'ing 和 PHP 手动阅读之后,我真的坚持在日期时间上添加 X 分钟,但我似乎没有取得任何进展。

我的日期时间格式是:

2011-11-17 05:05:year-month-day hour:minute

要添加的分钟数将是 0 到 59 之间的一个数字

我希望输出与添加分钟的输入格式相同。

有人可以给我一个工作代码示例吗,因为我的尝试似乎没有让我得到任何结果?

【问题讨论】:

    标签: php date time


    【解决方案1】:
    $newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
    echo date('Y-m-d H:i:s', $newtimestamp);
    

    结果是

    2011-11-17 05:21:00

    现场演示是here

    如果您还不熟悉strtotime,最好前往php.net 发现它的强大功能:-)

    【讨论】:

    • 最懂的一个
    • 现场演示不再可用
    • @HasanAlyazidi 谢谢你,我已经更新了参考资料。
    【解决方案2】:

    我不知道为什么设置为解决方案的方法对我不起作用。 所以我在这里发布对我有用的东西,希望它可以帮助任何人:

    $startTime = date("Y-m-d H:i:s");
    
    //display the starting time
    echo '> '.$startTime . "<br>";
    
    //adding 2 minutes
    $convertedTime = date('Y-m-d H:i:s', strtotime('+2 minutes', strtotime($startTime)));
    
    //display the converted time
    echo '> '.$convertedTime;
    

    【讨论】:

      【解决方案3】:
      $minutes_to_add = 5;
      
      $time = new DateTime('2011-11-17 05:05');
      $time->add(new DateInterval('PT' . $minutes_to_add . 'M'));
      
      $stamp = $time->format('Y-m-d H:i');
      

      ISO 8601 standard for durationP{y}Y{m1}M{d}DT{h}H{m2}M{s}S 形式的字符串,其中{*} 部分被替换为表示持续时间的数字值。

      例如,P1Y2DT5S 表示 1 年 2 天 5 秒。

      在上面的示例中,我们向DateInterval 构造函数提供PT5M(或5 分钟)。

      【讨论】:

      • 日期:2011-11-18 00:00 如果我加上 5 分钟,结果是 2012-04-18 00:00。 ` $time = new DateTime($_REQUEST['start']); $time->add(new DateInterval('P' . $duration . 'M')); $endTime = $time->format('Y-m-d H:i');回声$结束时间; ` 格式化的应用程序,看来我今天也无法解决这个问题^_^
      • DateTime 比 strtotime 好多少?
      • “PT”代表什么?
      • @bozdoz 这不是哪种方法“更好”的问题。 strtotime 生成一个 Unix 时间戳作为 integer,例如,如果您在 php 中对日期进行排序,这将很有帮助。 DateTime 类提供对象和过程式操作的选项。它更具可读性,并且对处理不同时区之间的差异也有更好的支持;例如,如果您的项目输出来自同一数据实例的多个不同时区的日期。
      • @NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> 格式以字母 P 开头,表示“句号”。每个持续时间段由一个整数值表示,后跟一个时间段指示符。如果持续时间包含时间元素,则规范的该部分以字母 T 开头。
      【解决方案4】:

      一行mysql日期时间格式

      $mysql_date_time = (new DateTime())->modify('+15 minutes')->format("Y-m-d H:i:s");
      

      【讨论】:

        【解决方案5】:

        PHP's DateTime class 有一个有用的modify 方法,它接收易于理解的文本。

        $dateTime = new DateTime('2011-11-17 05:05');
        $dateTime->modify('+5 minutes');
        

        您还可以使用字符串插值或连接来参数化它:

        $dateTime = new DateTime('2011-11-17 05:05');
        $minutesToAdd = 5;
        $dateTime->modify("+{$minutesToAdd} minutes");
        

        【讨论】:

        • 两个最重要的答案都很棒并且工作正常,但我更喜欢这个。只是看起来更简单、更直观。
        【解决方案6】:

        不使用变量:

         $yourDate->modify("15 minutes");
         echo $yourDate->format( "Y-m-d H:i");
        

        使用变量:

         $interval= 15;
         $yourDate->modify("+{$interval } minutes");  
         echo $yourDate->format( "Y-m-d H:i");
        

        【讨论】:

        • 什么是$yourDate?这个答案对几年前发布的类似答案有什么作用?
        • 亲爱的@J.Money $yourDate 表示 $variable 名称,也许我的回答会在 100 年后对某人有所帮助。在问题没有结束之前,我们应该何时回答并不重要。希望您能理解并删除负面标记。
        【解决方案7】:

        使用strtotime("+5 minute", $date);


        示例:
        $date = "2017-06-16 08:40:00";
        $date = strtotime($date);
        $date = strtotime("+5 minute", $date);
        echo date('Y-m-d H:i:s', $date);
        

        【讨论】:

          【解决方案8】:

          执行此操作的函数的另一个示例:(根据this for function.datethis for DateInterval 更改您喜欢的时间和间隔格式):

          (我也写了alternate form of the below function。)

          // Return adjusted time.
          
          function addMinutesToTime( $dateTime, $plusMinutes ) {
          
              $dateTime = DateTime::createFromFormat( 'Y-m-d H:i', $dateTime );
              $dateTime->add( new DateInterval( 'PT' . ( (integer) $plusMinutes ) . 'M' ) );
              $newTime = $dateTime->format( 'Y-m-d H:i' );
          
              return $newTime;
          }
          
          $adjustedTime = addMinutesToTime( '2011-11-17 05:05', 59 );
          
          echo '<h1>Adjusted Time: ' . $adjustedTime . '</h1>' . PHP_EOL . PHP_EOL;
          

          【讨论】:

            【解决方案9】:

            正如 Brad 和 Nemoden 在上面的回答中所指出的,strtotime() 是一个很棒的函数。就个人而言,我发现标准的 DateTime 对象对于许多用例来说过于复杂。例如,我只想在当前时间上增加 5 分钟。

            我编写了一个函数,它以带有一些可选参数的字符串形式返回日期:
            1.) 时间:字符串 |例如:“+5 分钟”(默认 = 当前时间)
            2.) 格式:字符串 |例如:“Y-m-d H:i:s”(默认 = “Y-m-d H:i:s O”)

            显然,这不是一个功能齐全的方法。只是一个用于修改/格式化当前日期的快速简单的功能。

            function get_date($time=null, $format='Y-m-d H:i:s O')
            {
                if(empty($time))return date($format);
                return date($format, strtotime($time));
            }
            
            // Example #1: Return current date in default format
            $date = get_date(); 
            
            // Example #2: Add 5 minutes to the current date
            $date = get_date("+5 minutes"); 
            
            // Example #3: Subtract 30 days from the current date & format as 'Y-m-d H:i:s'
            $date = get_date("-30 days", "Y-m-d H:i:s"); 
            

            【讨论】:

              【解决方案10】:

              我认为这在处理时区时也会有所帮助。我修改后的解决方案基于@Tim Cooper 的解决方案,即上面的正确答案。

              $minutes_to_add = 10;
              $time = new DateTime();
              **$time->setTimezone(new DateTimeZone('America/Toronto'));**
              $time->add(new DateInterval('PT' . $minutes_to_add . 'M'));
              $timestamp = $time->format("Y/m/d G:i:s");
              

              粗线,第 3 行,是加法。我希望这也能帮助一些人。

              【讨论】:

                【解决方案11】:

                答案有点晚,但我会使用的方法是:

                // Create a new \DateTime instance
                $date = DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00');
                
                // Modify the date
                $date->modify('+5 minutes');
                
                // Output
                echo $date->format('Y-m-d H:i:s');
                

                或者在 PHP >= 5.4

                echo (DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00'))->modify('+5 minutes')->format('Y-m-d H:i:s')
                

                【讨论】:

                  【解决方案12】:

                  如果你想给出一个包含分钟的变量。

                  那么我认为这是实现这一目标的好方法。

                  $minutes = 10;
                  $maxAge = new DateTime('2011-11-17 05:05');
                  $maxAge->modify("+{$minutes} minutes");
                  

                  【讨论】:

                    【解决方案13】:

                    您可以使用本机函数轻松做到这一点:

                    strtotime('+59 minutes', strtotime('2011-11-17 05:05'));
                    

                    不过,我推荐使用 Tim 刚刚发布的 DateTime 类方法。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-01-07
                      • 2017-06-21
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-12-23
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多