PHP:没有年份的日期差异

时间:2016-03-25 14:23:49

标签: php date datediff

我正在构建一个功能,显示从当天起31天内过生日的用户列表。

生日存储在数据库中作为时间戳,包含日,月,年。如果我想计算该日期和今天日期之间的差异(使用PHP的Diff函数),它总是计算差异,包括年。

所以例如: 出生日期:2000年3月10日 当天:2016年3月25日

结果大约需要2.200天,但我想显示15。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:2)

您可以创建一个新的Datetime变量,其中包含生日和当年作为年份的日期和月份。然后检查差异。

答案 1 :(得分:0)

您可以在SELECT期间直接使用SQL执行此操作:

SELECT
    t.*,
    DATEDIFF(
        CONCAT(
            YEAR(NOW()),
            DATE_FORMAT(t.birthday, '-%m-%d')
        ),
        NOW()
    ) AS dayDiff
FROM
    usersTable t

这将为您提供生日与今天之间的天数差异,无论出生年份如何。如果您想最多过滤31天,可以添加HAVING

SELECT
    t.*,
    DATEDIFF(
        CONCAT(
            YEAR(NOW()),
            DATE_FORMAT(t.birthday, '-%m-%d')
        ),
        NOW()
    ) AS dayDiff
FROM
    usersTable t
HAVING 
    dayDiff BETWEEN 0 AND 31

答案 2 :(得分:0)

<?php
// set timezone
date_default_timezone_set("Asia/Kolkata");
function timeAgo($time_ago){
$cur_time   = time();
$time_elapsed   = $cur_time - $time_ago;

echo "<br/>";
$seconds    = $time_elapsed ;
$minutes    = round($time_elapsed / 60 );
$hours      = round($time_elapsed / 3600 );
$days       = round($time_elapsed / 86400 );
$weeks      = round($time_elapsed / 604800);
$months     = round($time_elapsed / 2600640 );
$years      = round($time_elapsed / 31207680 );
if($seconds <= 60){
    echo "$seconds seconds ago";
}
else if($minutes <=60){
    if($minutes==1){
        echo "one minute ago";
    }
    else{
        echo "$minutes minutes ago";
    }
}
else if($hours <=24){
    if($hours==1){
        echo "an hour ago";
    }else{
        echo "$hours hours ago";
    }
}
else if($days <= 7){
    if($days==1){
        echo "yesterday";
    }else{
        echo "$days days ago";
    }
}
else if($weeks <= 4.3){
    if($weeks==1){
        echo "a week ago";
    }else{
        echo "$weeks weeks ago";
    }
}
else if($months <=12){
    if($months==1){
        echo "a month ago";
    }else{
        echo "$months months ago";
    }
}
else{
    if($years==1){
        echo "one year ago";
    }else{
        echo "$years years ago";
    }
}
}
?>
<?php
  $curenttime=date("2017-03-16 10:10:00");
  $time_ago =strtotime($curenttime);
  echo timeAgo($time_ago);
?>