【问题标题】:Add 'x' number of hours to date迄今为止添加“x”小时数
【发布时间】:2012-07-08 08:02:59
【问题描述】:

我目前有 php 像这样返回当前日期/时间:

$now = date("Y-m-d H:m:s");

我想做的是有一个新变量$new_time 等于$now + $hours,其中$hours 是从24 到800 的小时数。

有什么建议吗?

【问题讨论】:

  • 我怀疑这是否是你想要的。我想让你注意,“H:m:s”中的“m”代表数字月份。我相信您想写“H:i:s”。请核对

标签: php date datetime dateadd hour


【解决方案1】:

您可以使用strtotime() 之类的函数向当前时间戳添加内容。 $new_time = date("Y-m-d H:i:s", strtotime('+5 hours')).

如果函数中需要变量,则必须使用双引号,然后像strtotime("+{$hours} hours"),但最好使用strtotime(sprintf("+%d hours", $hours))

【讨论】:

  • 可以,但是如果我用变量替换“5”,它就不能正常工作。 strtotime('+$hours hours')
  • 你不是说$new_time = date("Y-m-d H:i:s", strtotime('+5 hours')吗?m是月,i是分钟...
【解决方案2】:

另一种解决方案(面向对象)是使用 DateTime::add

例子:

<?php

$now = new DateTime(); //now
echo $now->format('Y-m-d H:i:s'); // 2021-09-11 01:01:55

$hours = 36; // hours amount (integer) you want to add
$modified = (clone $now)->add(new DateInterval("PT{$hours}H")); // use clone to avoid modification of $now object
echo "\n". $modified->format('Y-m-d H:i:s'); // 2021-09-12 13:01:55

Run script


【讨论】:

  • 这里的小错别字,$date->format 应该是 $now->format
  • 虽然我很欣赏 PHP 文档的链接,但最好描述一下示例中的参数的作用。您链接到DateTime::add 函数,该函数采用DateInterval 的参数,然后其文档说引用DateTime 构造函数支持的格式,然后指向“日期和时间格式”,然后链接到“时间格式” ”、“日期格式”、“复合格式”和“相对格式”。这些似乎都没有提到P,尽管我很可能在所有这些页面中都错过了它。我知道T 表示时间,H 小时,但P?....
  • @s.co.tt php.net/manual/en/dateinterval.construct.php 格式以字母 P 开头,表示句点。每个持续时间段由一个整数值表示,后跟一个时间段指示符。如果持续时间包含时间元素,则规范的该部分以字母 T 开头。
  • 谢谢!我确实想通了,请注意我对 PHP 文档而不是海报感到恼火。但我很高兴你的答案是为了后代!
【解决方案3】:

您可以使用strtotime() 来实现:

$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', $now)); // $now + 3 hours

【讨论】:

  • @RichardDesLonde 可能是因为每个人都复制了 OP 的代码示例。 :-)
  • 这对我不起作用,罗德里戈·普拉齐姆的回答是。
  • 遇到格式不正确的数值 - 不起作用
【解决方案4】:

正确

您可以使用 strtotime() 来实现:

$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', strtotime($now))); // $now + 3 hours

【讨论】:

    【解决方案5】:

    也可以使用unix风格的时间来计算:

    $newtime = time() + ($hours * 60 * 60); // hours; 60 mins; 60secs
    echo 'Now:       '. date('Y-m-d') ."\n";
    echo 'Next Week: '. date('Y-m-d', $newtime) ."\n";
    

    【讨论】:

    • 坏主意,闰年、闰秒、夏令时等问题。
    • @Dagon 不,它会正确计算。
    • 闰年使用这种方法,可以在再次使用日期时设置夏令时
    【解决方案6】:

    嗯...你的分钟应该更正...'i'是分钟。不是几个月。 :)(我也有同样的问题。

    $now = date("Y-m-d H:i:s");
    $new_time = date("Y-m-d H:i:s", strtotime('+3 hours', $now)); // $now + 3 hours
    

    【讨论】:

      【解决方案7】:

      我用这个,它的工作很酷。

      //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)));
      

      【讨论】:

        【解决方案8】:

        你可以试试libOuzo goodies,流畅的操作:

        echo Clock::now()->plusHours($hours)->format("Y-m-d H:m:s");
        

        API 允许多种操作。

        【讨论】:

          【解决方案9】:

          对于给定的 DateTime,您可以添加天、小时、分钟等。以下是一些示例:

          $now = new \DateTime();
          
          $now->add(new DateInterval('PT24H')); // adds 24 hours
          
          $now->add(new DateInterval('P2D')); // adds 2 days
          

          PHP: DateTime::add - 手动 https://www.php.net/manual/fr/datetime.add.php

          【讨论】:

            【解决方案10】:
            $date_to_be-added="2018-04-11 10:04:46";
            $added_date=date("Y-m-d H:i:s",strtotime('+24 hours', strtotime($date_to_be)));
            

            date()strtotime() 函数的组合可以解决问题。

            【讨论】:

              【解决方案11】:

              我喜欢那些内置的 php 日期表达式,例如 +1 hour,但由于某种原因,它们一直在我脑海中浮现。此外,我所知道的所有 IDE 都没有为这类东西提供自动完成功能。最后,虽然处理 strtotimedate 函数并不是什么火箭科学,但每次我需要它们时,我都必须在谷歌上搜索它们的用法。

              这就是为什么我喜欢消除(至少减轻)这些问题的解决方案。以下是将x 小时添加到日期的样子:

              (new Future(
                  new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
                  new NHours($x)
              ))
                  ->value();
              

              作为一个不错的奖励,您不必担心格式化结果值,它已经是 ISO8601 格式。

              这个例子使用了meringue库,你可以查看更多例子here

              【讨论】:

                【解决方案12】:

                为“现在”增加 2 小时

                $date = new DateTime('now +2 hours');
                

                $date = date("Y-m-d H:i:s", strtotime('+2 hours', $now)); // as above in example
                

                $now = new DateTime();
                
                $now->add(new DateInterval('PT2H')); // as above in example
                

                【讨论】:

                  【解决方案13】:
                     $now = date("Y-m-d H:i:s");
                     date("Y-m-d H:i:s", strtotime("+1 hours $now"));
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-04-05
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-10-28
                    • 1970-01-01
                    相关资源
                    最近更新 更多