我创建了一个函数来返回两个日期之间的差异
<?php
class days {
function dateDiff($start, $end) {
$start_ts = strtotime($start);
$end_ts = strtotime($end);
$diff = $end_ts - $start_ts;
$diff1 = ceil($diff / 86400);
return $diff1;
}
}
我在视图中有这个代码:
<?php
$a = new days();
$days = $a->dateDiff($v[17], date('Y/m/d'));
if ($days < 30) {
$ds = $days;
$tm = 'days';
} else {
if ($days < 365) {
$ds = $days / 30;
$tm = 'months';
} else {
$ds = $days / 365;
$tm = 'years';
}
}
$ v [17]是从数据库返回到视图的日期。
当我在2011年8月输入一篇文章时......它会显示:
2.9666666666667个月前
我问自己......这个Ceil方法怎么不能像它应该的那样返回一个int值?
如果这是正常的,那么解决方案是什么?
提前谢谢你:)
答案 0 :(得分:3)
ceil
功能在返回天数时效果很好。
但问题在于:
if ($days<365){
$ds=$days/30;
$tm='months';
}
这次你没有使用ceil
!你应该试试$ds = ceil($days / 30);
。
年数相同。
使用round
代替ceil
可能会更精确,因此32天不会在2个月内翻译:
$days = $a->dateDiff('10 oct 2011',date('Y/m/d'));
if ($days < 30) {
$ds = $days;
$tm = 'day';
}
else {
if ($days < 365){
$ds = round($days / 30);
$tm = 'month';
}
else {
$ds = round($days / 365);
$tm = 'year';
}
}
if ($ds > 1) {
$tm .= 's';
}
echo "$ds $tm"; # => 1 month; or 2 months using ceil function