За последние 24 часа нас посетили 96970 программистов и 6004 робота. Сейчас ищут 1916 программистов ...

Скрипт, который считает, сколько дней осталось до дня рождения

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 7 ноя 2017.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    На сайтах показывает, что до моего дня рождения осталось 135 дней (23.03.1994), а в мой скрипт показывает, что осталось 136 дней, не пойму почему?

    PHP:
    1. <?php  
    2.     $now = date('d.m.Y'); //сейчас
    3.     $nowArr = explode('.', $now);
    4.  
    5.     $monthNow = date('t', mktime(0, 0, 0, $nowArr[1], $nowArr[0], $nowArr[2])); //текущий месяц
    6.  
    7.     $birthday = '23.03.1994'; //день рождение
    8.     $arr = explode('.', $birthday);
    9.  
    10.     $monthBirthday = date('t', mktime(0, 0, 0, $arr[1], $arr[0], $arr[2])); //месяй день рождения
    11.     $rest = $monthBirthday - $arr[0]; //отсёк остальные дни, которые идут после моего дня рождения в этом месяце.
    12.  
    13.     $days = 0;
    14.  
    15.     for($i = $nowArr[1]; $i <= 12; $i++) {
    16.         $days = $days + date('t', mktime(0, 0, 0, $i, $nowArr[0], $nowArr[2])); // количество дней до конца года сначала месяца
    17.         if($i == 12) {
    18.             for($j = 1; $j <= $arr[1]; $j++) {
    19.                 $days = $days + date('t', mktime(0, 0, 0, $j, $nowArr[0], $nowArr[2])); // количество дней до конца нужного месяца сначала месяца
    20.             }
    21.         }
    22.     }
    23.  
    24.     echo $days - $nowArr[0] - $rest;
    --- Добавлено ---
    Я посчитал вручную по календарю и получилось 136
     
  2. sense1

    sense1 Новичок

    С нами с:
    16 фев 2017
    Сообщения:
    35
    Симпатии:
    1
    Попробуй указать явно дату своего дня рождения в следующем году

    PHP:
    1. $difference = round(strtotime('23-03-2018') - strtotime(date('d-m-Y')));
    2. // Количество дней
    3. echo round($difference / (3600 * 24));
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Если реальная задача, а не чтоб научится, то DateTime надо использовать, и его метод diff, там можно будет именно в днях получить.
     
    Dimon2x нравится это.
  4. sense1

    sense1 Новичок

    С нами с:
    16 фев 2017
    Сообщения:
    35
    Симпатии:
    1
    Тоже самое
    PHP:
    1. $birthday = new DateTime('2018-03-23');
    2. $today = new DateTime(date('Y-m-d'));
    3. $interval = $birthday->diff($today);
    4. echo $interval->format('%R%a дней');
     
    Dimon2x нравится это.
  5. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @sense1, проверьте настройки часового пояса. И соотнесите его с локальным временем :)