Php 显示错误值的日期差
我使用了一个函数来计算两个日期之间的日期差 这是我的功能Php 显示错误值的日期差,php,date,Php,Date,我使用了一个函数来计算两个日期之间的日期差 这是我的功能 function date_difference ($date_1, $date_2) { $val_1 = new DateTime($date_1); $val_2 = new DateTime($date_2); $interval = $val_1->diff($val_2); $year = $interval->y; $month = $interv
function date_difference ($date_1, $date_2) {
$val_1 = new DateTime($date_1);
$val_2 = new DateTime($date_2);
$interval = $val_1->diff($val_2);
$year = $interval->y;
$month = $interval->m;
$day = $interval->d;
$output = '';
if($year > 0){
if ($year > 1){
$output .= $year." years ";
} else {
$output .= $year." year ";
}
}
if($month > 0){
if ($month > 1){
$output .= $month." months ";
} else {
$output .= $month." month ";
}
}
if($day > 0){
if ($day > 1){
$output .= $day." days ";
} else {
$output .= $day." day ";
}
}
if($day == 0)
$output.=' Almost Over';
if($day < 0)
$output.= ' Expired';
return $output;
}
它将结果显示为25天,其中应显示已过期。谁能指出我哪里做错了。只需使用UNIX时间戳,这样它应该是一个非常简单的计算 它可以用Y-D-M显示,如果你觉得有点花哨,你甚至可以制作一个倒计时时钟 大多数MMO和管理系统使用它来注册注册日期和时间,并显示成员在社区中的时间
希望有帮助 我一看到这个XKCD页面就想有机会发布它,就在这里
当您的代码试图解析
02/06/2013
时,它如何知道您的意思是“2月2日”还是“6月6日”?在指定要解析的日期时,您应该始终使用YYYY-MM-DD
格式,或者更好的方法是硬编码实际的数字时间戳(在本例中为1360126800)DateInterval
将不会有负面值,您需要比较两个DateTime对象
改为
if($val_1 < $val_2 && $day == 0)
$output.=' Almost Over';
if($val_1 > $val_2)
$output.= ' Expired';
return $output;
if($val_1<$val_2&&$day==0)
$output.='几乎结束';
如果($val_1>val_2)
$output.='Expired';
返回$output;
你试过另一种方法吗?我找到了。是的,我没有编写函数,只是修改了它,让它按照我想要的方式工作。这只是一件个人的小事,但我会使用三元运算符,而不是$[timelength]>1
if语句,因为它会更干净。好的,谢谢,我会这样做。像这样尝试过,但仍然显示25天<代码>回波时差(日期('Y-m-d'),'2013-02-06')代码>您需要检查是否($interval['invert'])返回“Expired'代码>致命错误:无法在第87行的/home/crowdfun/public_html/wp content/themes/vantage child/functions.php中将DateInterval类型的对象用作数组,它应该是$interval->invert
。是的,谢谢你的工作,但是为什么我需要返回'Expired'
我不能将它附加到$output
?已经尝试过了,但是它给出了2个月30天的回波时间差(日期('Y-d-m'),'2013-06-02')代码>那么简单地说,你希望代码减去1,直到值为25,然后返回“过期”,我理解正确吗?是的。如果两个日期之间的差异小于0,则它应返回expiredThat,这也不起作用。我已经过期25天了。几乎在过去的一段时间里,我都是一片空白。我想我可以修改你的代码,让它正常工作。几乎超过显示正确的结果为我。所以只有过期的才需要修改。我确实喜欢这个<代码>如果($val_1>$val_2)返回“过期”代码>
if($val_1 < $val_2 && $day == 0)
$output.=' Almost Over';
if($val_1 > $val_2)
$output.= ' Expired';
return $output;