添加4小时到目前为止


PHP Add 4 hours to date

我试图在日期中添加四个小时,但结果时间不正确

$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小时

这样行吗?

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


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

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

小提琴

这是正确的语法。你可以用

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

小提琴

strtotime使用不正确。它的第二个参数必须是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 >

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

没有看到你在$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));