2016-03-25 3 views
0

Я создаю функцию, которая показывает список пользователей, у которых есть свой день рождения, в течение 31 дня с текущего дня.PHP: Date diff without years

Дни рождения хранятся в базе данных как временная метка, содержащая день, месяц, год. Если я хочу рассчитать разницу между этой датой и сегодняшней датой (используя функцию Diff для PHP), она всегда вычисляет разницу, включая годы.

Так, например: дата рождения: 10 марта 2000 текущий день: 25 марта 2016

дает около 2,200 дней, как результат, но я хочу, чтобы отобразить 15.

Есть способ сделать это?

+0

Почему вы не используете функцию «дата»? – ops

+0

Как использовать эту функцию для вычисления разницы? – ErwinM

ответ

2

Вы могли бы просто создать новую переменную Datetime, с днем ​​и месяцем с дня рождения и текущего года в году. затем проверьте разницу.

+0

Что произойдет, если это 20 декабря? Думаю, он не дает дат в джануари? Потому что это не в том же году? – ErwinM

0

Вы можете сделать это непосредственно с 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 
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); 
?>