На сайтах показывает, что до моего дня рождения осталось 135 дней (23.03.1994), а в мой скрипт показывает, что осталось 136 дней, не пойму почему? PHP: <?php $now = date('d.m.Y'); //сейчас $nowArr = explode('.', $now); $monthNow = date('t', mktime(0, 0, 0, $nowArr[1], $nowArr[0], $nowArr[2])); //текущий месяц $birthday = '23.03.1994'; //день рождение $arr = explode('.', $birthday); $monthBirthday = date('t', mktime(0, 0, 0, $arr[1], $arr[0], $arr[2])); //месяй день рождения $rest = $monthBirthday - $arr[0]; //отсёк остальные дни, которые идут после моего дня рождения в этом месяце. $days = 0; for($i = $nowArr[1]; $i <= 12; $i++) { $days = $days + date('t', mktime(0, 0, 0, $i, $nowArr[0], $nowArr[2])); // количество дней до конца года сначала месяца if($i == 12) { for($j = 1; $j <= $arr[1]; $j++) { $days = $days + date('t', mktime(0, 0, 0, $j, $nowArr[0], $nowArr[2])); // количество дней до конца нужного месяца сначала месяца } } } echo $days - $nowArr[0] - $rest; --- Добавлено --- Я посчитал вручную по календарю и получилось 136
Попробуй указать явно дату своего дня рождения в следующем году PHP: $difference = round(strtotime('23-03-2018') - strtotime(date('d-m-Y'))); // Количество дней echo round($difference / (3600 * 24));
Если реальная задача, а не чтоб научится, то DateTime надо использовать, и его метод diff, там можно будет именно в днях получить.
Тоже самое PHP: $birthday = new DateTime('2018-03-23'); $today = new DateTime(date('Y-m-d')); $interval = $birthday->diff($today); echo $interval->format('%R%a дней');