日期之间的PHP差异始终显示为0

时间:2014-07-17 20:21:11

标签: php date

我试图拿两个日期并相互减去

$now = date('2014-07-17');
$due = date('2014-07-20');

$diff = $now - $due;
$timeRemaining = floor($diff/(60*60*24);

每次应该为3

时返回0

3 个答案:

答案 0 :(得分:4)

date()采用字符串格式和Unix时间戳作为参数,而不仅仅是文字日期字符串。因此,对date()的两次调用都会将原始值返回给您,因为两者都是无效参数。由于字符串的减法,Type juggling会为这两个变量返回2014,结果就是它们相等。

使用strtotime()代替返回您期望的时间戳,并可以使用日期数学。

此外,如果您希望得到正整数,则需要先将较晚的日期放在第一位。

$now = strtotime('2014-07-17');
$due = strtotime('2014-07-20');

$diff = $due - $now;
$timeRemaining = floor($diff/(60*60*24);

答案 1 :(得分:2)

你要减去两个字符串,每个字符串得到type juggled到整数值2014,这当然会返回0

$now = (int) date('2014-07-17'); // Will make $now = 2014

这是一种方法(但我建议改为使用DateTime个对象):

$now = strtotime('2014-07-17');
$due = strtotime('2014-07-20');

$diff = $due - $now; // Notice how you had your original equation backwards
$timeRemaining = floor($diff/(60*60*24));

以下是使用DateTime个对象的方法:

$now = new DateTime('2014-07-17');
$due = new DateTime('2014-07-20');

$diff = $due->sub($now);

$timeRemaining = $diff->format('%d');

答案 2 :(得分:1)

您需要使用strtotime,而不是date。您需要撤消减法公式 - 应从未来日期($now)中减去较早的日期($due)。

$now = strtotime('2014-07-17');
$due = strtotime('2014-07-20');

$diff = $due - $now;
$timeRemaining = floor($diff/(60*60*24));

See Demo