如何在PHP中从日期时间对象中减去24小时

adi*_*dit 35 php datetime

我有以下代码:

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

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

A non well formed numeric value encountered in...
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

vas*_*ite 57

$date = (new \DateTime())->modify('-24 hours');
Run Code Online (Sandbox Code Playgroud)

要么

$date = (new \DateTime())->modify('-1 day');
Run Code Online (Sandbox Code Playgroud)

(后者考虑到这个评论,因为它是一个有效点.)

应该在这里工作正常.见http://PHP.net/datetime

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

  • 是的,这就是\ DateTime的工作方式.如果这对您不利,请改用\ DateTimeImmutable. (5认同)

Joe*_*kes 36

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.
Run Code Online (Sandbox Code Playgroud)

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

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

这样做的好处是你可以重用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.
Run Code Online (Sandbox Code Playgroud)


Sum*_*ani 10

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

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

要么

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

产量

2013-07-17 10:07:29
Run Code Online (Sandbox Code Playgroud)


Sre*_*dhu 5

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

<?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;
?>
Run Code Online (Sandbox Code Playgroud)