我在下面有这个日期时间代码。我想在$ 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
如何在开始时以秒为单位减去分钟数?或者有一种最好的方法吗?
答案 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