PHP用小时和分钟减去日期

PHP用小时和分钟减去日期,php,time,subtraction,Php,Time,Subtraction,嗨,我在网上搜索过这个话题,似乎不能给我正确的答案? 我做错了什么?我想输出过期期间的剩余天数,以小时和分钟为单位 这就是我所做的 $date_expire = '2014-09-12 23:59:59'; $date = new DateTime($date_expire); $now = new DateTime(); echo $date->diff($now)->format("%d days, %H hours and %i minutes"); 我来自菲律宾,我写

嗨,我在网上搜索过这个话题,似乎不能给我正确的答案? 我做错了什么?我想输出过期期间的剩余天数,以小时和分钟为单位

这就是我所做的

$date_expire = '2014-09-12 23:59:59';  
$date = new DateTime($date_expire);
$now =  new DateTime();
echo $date->diff($now)->format("%d days, %H hours and %i minutes");
我来自菲律宾,我写这封信的当前日期和时间是2014年8月13日下午5:26
输出给我29天12小时30分钟。你认为哪一个是错的?你能帮助我吗?谢谢

您的源代码运行良好,它符合您的期望

是的,那一天错过了29天12小时30分钟又几个月

问题是您没有打印月份:

这里是您的脚本,包括月份:

// this is your start date
$date_expire = "2014-09-12 23:59:59";
// build a DateTime instance from it
$date = new DateTime($date_expire);
// another instance for the date of NOW
$now =  new DateTime();
// print the difference with %m (months) included
echo $date->diff($now)->format("%m months, %d days, %H hours and %i minutes");
作为参考,%a是一个不错的选择。这里结合一个简单的检查是否有一些订阅已过期

date_default_timezone_set('Asia/Manila');

// August 13, 2014 5:26pm
$date_now    = '2014-08-13 17:26:00';
$date_expire = '2014-09-12 23:59:59';

$now     = new DateTime($date_now);
$expires = new DateTime($date_expire);

$diff = $expires->diff($now)->format("%a days, %h hours and %i minutes");

if ($now < $expires) {
    echo "Your subscription will expire in $diff", PHP_EOL;
} else {
    echo "Your subscription expired $diff ago", PHP_EOL;
}
今天运行它,使用$now=newdatetime;该输出为:

Your subscription expired 168 days, 2 hours and 56 minutes ago

服务器可能有其他时区。在php.ini中设置它,或者使用date\u defualt\u timezone\u sets而不是%d,使用%a将返回日差总数。
Your subscription expired 168 days, 2 hours and 56 minutes ago