PHP添加4小时迄今

时间:2015-09-17 14:48:17

标签: php

我正在尝试将四个小时添加到某个日期,但结果时间不正确

$date = $dates[0] < $dates[1] ? $dates[1] : $dates[0];
$new_date = date("Y-m-d H:i:s", strtotime('+4 hours', $date));
echo $date;
echo "<br/>". $new_date;

我得到的结果是

  

2015-09-17 09:36:18

     

1969-12-31 20:33:35

第一个日期是正确的,但第二个日期不是,它应该比第一个日期提前4个小时

4 个答案:

答案 0 :(得分:2)

将时间戳添加到时间戳,而不是日期字符串。

echo  date("Y-m-d H:i:s", strtotime('+4 hours', strtotime("2015-09-17  09:36:18")));
                                                ^

<强> Fiddle

这是正确的语法。您可以使用

简化它
echo  date("Y-m-d H:i:s", strtotime('2015-09-17 09:36:18 +4 hours'));

<强> Fiddle

答案 1 :(得分:2)

您正确使用strtotime。它的第二个参数MUSt是一个unix时间戳:

php > var_dump(strtotime('+4 hours', 12345));
int(26745)
php > var_dump(strtotime('+4 hours', '2015-09-17 09:36:18'));
PHP Notice:  A non well formed numeric value encountered in php shell code on line 1
int(16415)

你的电话应该是

php >  var_dump(date('r', strtotime('2015-09-17 09:36:18 + 4 hours')));
                                                        ^^^^^^^^^^^
string(31) "Thu, 17 Sep 2015 13:36:18 -0500"
php >

答案 2 :(得分:2)

其他两个答案都是正确的。

没有看到你的$ dates数组中的内容使得给出确切答案有点棘手:)但是在下面的例子中我假设你有一个格式良好的字符串日期,在这种情况下你需要将它转换回在将您喜欢的内容添加到其中之前使用相同的方法(strtotime)的时间戳。

$date = (new DateTime('now'))->format('Y-m-d H:i:s');
$new_date = date('Y-m-d H:i:s', strtotime('+4 hours', strtotime($date)));

echo $date . PHP_EOL . $new_date;

换句话说,如果您的$date数组包含UNIX时间戳,那么您的原始代码应该可以正常工作

$date = (new DateTime('now'))->getTimestamp();
$new_date = date("Y-m-d H:i:s", strtotime('+4 hours', $date));

答案 3 :(得分:1)

这有用吗?

$date = $dates[0] < $dates[1] ? $dates[1] : $dates[0];
$new_date = date("Y-m-d H:i:s", strtotime('+4 hours', strtotime($date));
echo $date;
echo "<br/>". $new_date;

您正在传递$date作为strtotime的第二个参数,并且它不是UNIX时间戳(正如您所说)。因此,再次使用strtotime,您应该在UNIX时间戳中将其转换,然后将其传递给strtotime。