我试图在日期中添加四个小时,但结果时间不正确
$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));