43

我有以下代码:

  $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...

为什么是这样?

4

10 回答 10

65
$date = (new \DateTime())->modify('-24 hours');

或者

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

(后者考虑了这个评论,因为它是一个有效的观点。)

应该在这里为您工作。见http://PHP.net/datetime

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

于 2013-07-18T08:17:54.843 回答
49

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 中处理 DateTimes 的最流行的库是Carbon

在这里,您只需执行以下操作:

$yesterday = Carbon::now()->subDay();
于 2013-07-18T08:17:54.767 回答
11

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

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
于 2013-07-18T08:35:16.353 回答
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;
?>
于 2019-03-16T17:51:45.000 回答
3

这可能对您有帮助:

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

//check the date
echo $date;
于 2013-07-18T08:19:31.443 回答
2

这也应该有效

$date = date("Y-m-d H:m:s", strtotime('-24 hours'));
于 2013-07-18T08:18:47.427 回答
2
$now = date("Y-m-d H:i:s");
$date = date("Y-m-d H:i:s", strtotime('-24 hours', strtotime($now)));

在 $now 之前添加“strtotime”,并将 Ymd H:m:s 替换为 Ymd H:i:s

于 2017-09-12T11:01:48.747 回答
1

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

$date = date("Y-m-d H:m:s", strtotime('-24 hours', time()));
于 2013-07-18T08:34:23.270 回答
1

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

$now = date("Y-m-d H:i:s");
$date = date("Y-m-d H:i:s", strtotime('-2 hours', strtotime($now)));
于 2020-06-11T11:38:53.283 回答
0

您所要做的就是将您的代码更改为

$now = strtotime(date("Y-m-d H:m:s"));
$date = date("Y-m-d H:m:s", strtotime('-24 hours', $now));
于 2017-06-09T16:39:33.803 回答