【问题标题】:how do I subtract 24 hour from date time object in PHP如何从 PHP 中的日期时间对象中减去 24 小时
【发布时间】:2013-07-18 08:14:37
【问题描述】:

我有以下代码:

  $now = date("Y-m-d H:m:s");
  $date = date("Y-m-d H:m:s", strtotime('-24 hours', $now));

但是,现在它给了我这个错误:

A non well formed numeric value encountered in...

这是为什么?

【问题讨论】:

  • 参见手册 - strtotime 期望时间戳作为第二个值。 (在您的示例中,您可以完全省略它)
  • 您可能需要考虑节省一天时间的边界:您真的想要从上午 10 点到上午 11 点(或上午 9 点?)。
  • ...有其他人发现mi 通常在时间部分的位置吗?每个答案都复制粘贴了这个疏忽。哈。
  • @mickmackusa 你是完全正确的。分钟格式为im 为月份
  • 您为什么不接受这个非常基本且广受欢迎的问题的答案?这样做会帮助其他人。顺便说一句,我认为@Joel 给出了最好的答案。

标签: php datetime


【解决方案1】:

strtotime() 需要一个 unix 时间戳(即 number seconds since Jan 01 1970

$date = date("Y-m-d H:i:s", strtotime('-24 hours', time())); ////time() is default so you do not need to specify.

我建议使用 datetime 库,因为它是一种更加面向对象的方法。

$date = new DateTime(); //date & time of right now. (Like time())
$date->sub(new DateInterval('P1D')); //subtract period of 1 day

这样做的好处是可以重复使用DateInterval

$date = new DateTime(); //date & time of right now. (Like time())
$oneDayPeriod = new DateInterval('P1D'); //period of 1 day
$date->sub($oneDayPeriod);
$date->sub($oneDayPeriod); //2 days are subtracted.
$date2 = new DateTime(); 
$date2->sub($oneDayPeriod); //can use the same period, multiple times.

碳(2020 年更新)

在 PHP 中处理日期时间的最流行的库是 Carbon

在这里您只需这样做:

$yesterday = Carbon::now()->subDay();

【讨论】:

  • 这是使用DateTime->sub() 的唯一答案,这是从日期时间中减去的正确方法。赞成 - 这应该是公认的答案。
【解决方案2】:
$date = (new \DateTime())->modify('-24 hours');

$date = (new \DateTime())->modify('-1 day');

(后者考虑到this comment,因为它是一个有效点。)

这里应该适合你。见http://PHP.net/datetime

$date 将是 DateTime 的一个实例,一个真正的 DateTime 对象。

【讨论】:

  • 这个答案就地修改了原始的 DateTime 对象。
  • 是的,这就是 \DateTime 的工作方式。如果这对您不利,请改用 \DateTimeImmutable。
  • 啊,谢谢!不知道 DateTimeImmutable 是一个东西。
【解决方案3】:

减少或增加时间的最简单方法,

<?php
**#Subtract 24 hours**
$dtSub = new DateTime('- 24 hours');
var_dump($dtSub->format('Y-m-d H:m:s'));
**#Add 24 hours**
$dtAdd = new DateTime('24 hours');
var_dump($dtAdd->format('Y-m-d H:m:s'));die;
?>

【讨论】:

    【解决方案4】:

    在相同的代码中使用 strtotime() 它的工作。

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

    【讨论】:

      【解决方案5】:

      您可以通过多种方式做到这一点...

      echo date('Y-m-d H:i:s',strtotime('-24 hours')); // "i" for minutes with leading zeros
      

      echo date('Y-m-d H:i:s',strtotime('last day')); // 24 hours (1 day)
      

      输出

      2013-07-17 10:07:29
      

      【讨论】:

      • 您的应用程序需要一个字符串还是一个对象的最大区别。如果是字符串,则字符串方式很好,但如果是对象,则必须使用 DateTime。虽然输出可能看起来相同,但数据类型却不同。
      【解决方案6】:
      $now = date("Y-m-d H:i:s");
      $date = date("Y-m-d H:i:s", strtotime('-24 hours', strtotime($now)));
      

      在 $now 之前添加“strtotime”, 和 Y-m-d H:m:s 替换为 Y-m-d H:i:s

      【讨论】:

        【解决方案7】:

        这也应该有效

        $date = date("Y-m-d H:m:s", strtotime('-24 hours'));
        

        【讨论】:

          【解决方案8】:

          这可能对你有帮助:

          //calculate like this
          $date = date("Y-m-d H:m:s", (time()-(60*60*24)));
          
          //check the date
          echo $date;
          

          【讨论】:

          【解决方案9】:

          您可以简单地使用time() 来获取当前时间戳。

          $date = date("Y-m-d H:m:s", strtotime('-24 hours', time()));
          

          【讨论】:

            【解决方案10】:

            你所要做的就是改变你的代码

            $now = strtotime(date("Y-m-d H:m:s"));
            $date = date("Y-m-d H:m:s", strtotime('-24 hours', $now));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-08-23
              • 2011-08-26
              相关资源
              最近更新 更多