获取日期之间的差异返回零
我在'Ymd H:i:s'中有一个日期时间,我试图将当前日期与定义的日期+1天相减,以小时,分钟和秒计算剩余时间:获取日期之间的差异返回零
$time = '2017-10-05 14:54:03';
$now = date('Y-m-d H:i:s');
$endTransaction = date('Y-m-d H:i:s', strtotime($time. ' + 1 day'));
$dteDiff = $endTransaction - $now;
echo $dteDiff;
,但我总是得到0的结果
你做错了。 date
函数返回字符串,因此PHP无法比较任何内容。改为使用DateTime类。它diff方法返回一些公共属性DateInterval对象,像days
物业等等,它是天的两个日期之间的正整数(四舍五入):
$now = new \DateTime();
$endTransaction = (new \DateTime('2017-12-05 14:54:03'))->modify('+1 day');
$diff = $endTransaction->diff($now);
printf(
'Difference in days: %d, hours: %d, minutes: %d, seconds: %d',
$diff->days,
$diff->h,
$diff->m,
$diff->s
);
我想endTransaction来自已定义的变量+ 1天 –
我编辑了我的答案。下次请查看文档如何操作DateTime对象。官方文件很简单。 –
您可能需要使用此date_diff
$time = '2017-10-05 14:54:03';
$now = date_create(date('Y-m-d H:i:s'));
$endTransaction = date_create(date('Y-m-d H:i:s', strtotime($time. ' + 1 day')));
$dteDiff = date_diff($now, $endTransaction);
$date = new DateTime($dteDiff);
$result = $date->format('Y-m-d H:i:s');
根据上述描述,请尝试执行下面的代码片段作为它的解决方案。
$time = '2017-10-05 14:54:03';
$now = strtotime(date('Y-m-d H:i:s'));
$endTransaction = strtotime(date('Y-m-d H:i:s', strtotime($time. ' + 1 day')));
$dteDiff = ($endTransaction - $now)/(24*60*60);
echo round($dteDiff);
不必要的过度复杂和低效的例子。 –
$endTransaction
和$now
是字符串。
$time = '2017-10-05 14:54:03';
$now = date('Y-m-d H:i:s');
$endTransaction = date('Y-m-d H:i:s', strtotime($time. ' + 1 day'));
echo($endTransaction."\n");
echo($now."\n");
It prints:
2017-10-06 14:54:03
2017-10-05 11:45:39
减法不是字符串的有效操作。它只能处理数字。上面的字符串是converted to numbers。转换只使用字符串中最左边的数字,直到它到达不是数字的第一个字符。
上述两个字符串在转换为数字时产生2017
,它们的差值当然是0
。
与PHP的日期的最简便的方法是使用DateTime
及其相关类。
// Convert the input string to a DateTime object
$then = new DateTime('2017-10-05 14:54:03');
// Add 1 day
$then->add(new DateInterval('P1D'));
// Get the current date and time
$now = new DateTime('now');
// Compute the difference; it is a DateInterval object
$diff = $now->diff($then);
// Display the dates and the difference
echo('Then: '.$then->format("Y-m-d H:i:s\n"));
echo('Now : '.$now->format("Y-m-d H:i:s\n"));
echo('Remaining: '.$diff->format("%R%a days, %h hours, %i minutes, %s seconds.\n"));
输出:
Then: 2017-10-06 14:54:03
Now : 2017-10-05 12:36:25
Remaining: +1 days, 2 hours, 17 minutes, 38 seconds.
这不是SQL队友,你basicly试图DIFF字符串。 –
请尝试使用[DateTime](http://php.net/manual/en/class.datetime.php)对象。 – CD001
和日期时间差异功能 – user2867342