在php datetime中减去分钟和秒

时间:2016-06-16 03:15:25

标签: php

我在下面有这个日期时间代码。我想在$ begin变量中减去23小时59分钟:

 $date = 2016-03-14 23:59:59;
 $given = new DateTime($date, new DateTimeZone("Asia/Tokyo"));
 $given->setTimezone(new DateTimeZone("UTC"));
 $end = $given->format("Y-m-d H:i:s"); 
 $begin = date('Y-m-d H:i:s',strtotime('-23 hours',strtotime($end)));

现在输出是:

$end is: 2016-03-14 14:59:59
$begin is: 2016-03-13 15:59:59

我想要的输出是:

 $end is: 2016-03-14 14:59:59
 $begin is: 2016-03-13 15:00:00

如何在开始时以秒为单位减去分钟数?或者有一种最好的方法吗?

4 个答案:

答案 0 :(得分:2)

因为你只想改变小时,你可以做到这一点来获得渴望的结果,但你也可以做其他事情,比如 Amit Roy 做了或 ceejayoz 建议。这是一个非常简单的解决方案,只需执行此操作:将min和sec重置为00,以便输出显示为您想要的效果。

echo $begin = date('Y-m-d H:00:00',strtotime('-23 hours', strtotime($end)));

答案 1 :(得分:1)

DateInterval 类与 DateTime :: sub 方法一起使用。

示例:

$begin_datetime = $given->sub(new DateInterval('PT23H59M00S'));
$begin = $begin_datetime->format('Y-m-d H:i:s');

http://php.net/manual/en/datetime.sub.php
http://php.net/manual/en/dateinterval.construct.php

答案 2 :(得分:0)

[正如Frayne发表评论。] 由于您只想更改小时,而不是小时或秒,您必须将min和sec设置为00:00作为您的愿望输出。

echo $begin = date('Y-m-d H:00:00',strtotime('-23 hours', strtotime($end)));

你可以通过多种方式做到这一点,这是一种方式。

答案 3 :(得分:-1)

你必须这样做以获得理想的结果。你只减去了几个小时

$begin = date('Y-m-d H:i:s',strtotime('-23 hours',strtotime($end)));

你必须减去min和sec

$begin = date('Y-m-d H:i:s',strtotime('-23 hours -59 minutes -59 seconds',strtotime($end)));

最后你得到这段代码:

$date = "2016-03-14 23:59:59";
$given = new DateTime($date, new DateTimeZone("Asia/Tokyo"));
$given->setTimezone(new DateTimeZone("UTC"));
$end = $given->format("Y-m-d H:i:s"); 
echo $begin = date('Y-m-d H:i:s',strtotime('-23 hours -59 minutes -59 seconds',strtotime($end))); //2016-03-13 15:00:00