如何在PHP中从datetime中减去1天16小时

时间:2016-04-05 13:18:09

标签: php strtotime

我尝试从给定的日期时间示例中减去日期和小时:

$schedule_date_time = '2016-02-29 08:30 PM';
echo date( "Y-m-d h:i a", strtotime("-1 day 16 hours", strtotime($schedule_date_time)) );

它给了我以下结果: 2016-02-29 12:30 pm

哪个不正确......

但如果我这样做:

$schedule_date_time = '2016-02-29 08:30 PM';
    echo date( "Y-m-d h:i a", strtotime("-1 day -16 hours", strtotime($schedule_date_time)) );

它给了我以下结果: 2016-02-28 04:30 am

这是正确的,但我不可能在整数之前识别并在字符串中加上减号。

3 个答案:

答案 0 :(得分:4)

使用date_sub / DateTime::sub

$date = date_create("2016-02-29 08:30 PM") ;
date_sub($date, date_interval_create_from_date_string('1 day 16 hours'));
echo date_format($date, 'Y-m-d h:i a'); // 2016-02-28 04:30 am

如果您想添加一定的时间而不是减去时间,请改用date_add

答案 1 :(得分:2)

DateTime对象在PHP中非常强大:

$dateTimeObj = DateTime::createFromFormat('Y-m-d H:i:s', '2016-04-04 15:20:00');
$dateTimeObj->modify('-1 day');
$dateTimeObj->modify('-16 hours');
echo $dateTimeObj->format('Y-m-d H:i:s');

它非常易于使用,并且对于未来的代码审查者来说非常易于维护。

答案 2 :(得分:0)

您可以将DateTime::sub类方法与DateInterval类一起使用,如

$date2 = new DateTime('2016-02-29 08:30 PM');
$date2->sub(new DateInterval('P1DT16H'));
echo $date2->format("Y-m-d H:i:s");