我试图拿两个日期并相互减去
$now = date('2014-07-17');
$due = date('2014-07-20');
$diff = $now - $due;
$timeRemaining = floor($diff/(60*60*24);
每次应该为3
时返回0答案 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));