Таймер дней до Нового года

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
maksimka
Сообщения: 23
Зарегистрирован: Сб апр 07, 2018 2:04 pm
Откуда: Новосибирск
Благодарил (а): 13 раз
Поблагодарили: 12 раз

Таймер дней до Нового года

Сообщение maksimka » Вт ноя 13, 2018 4:32 pm

Всем привет )
Ребетенок попросил научить Алису отвечать на вопрос: "Сколько осталось дней до Нового года".
Немного Гугла и получилось Это:

$currentYear = date('Y'); // получаем текущий год
$newYear = mktime(0, 0, 0, 1, 1, $currentYear + 1); // высчитываем дату Нового Года
$seconds = $newYear - time();
$days = 0; $hours = 0; $minutes = 0;
$oneMinute = 60;
$oneHour = 60 * $oneMinute;
$oneDay = $oneHour * 24;
if ($seconds / $oneDay > 0) {
$days = (int)($seconds / $oneDay);
$seconds -= $days * $oneDay;
}
if ($seconds / $oneHour > 0) {
$hours = (int)($seconds / $oneHour);
$seconds -= $hours * $oneHour;
}
if ($seconds / $oneMinute > 0) {
$minutes = (int)($seconds / $oneMinute);
$seconds -= $minutes * $oneMinute;
}
sg("ThisComputer.DayFromNY","$days");
sayReply('До Нового Года осталось:'.$days . ' дней, ' .$hours . ' часов, ' .$minutes . ' минут ',2);

Одно НО омрачает радость киндера - 52 ДНЕЙ звучит не айс.
Подскажите (или тыкните носом куда посмотреть), как научить Алису склонять дней/дня.

=======================================================================================================
Я у себя оставил такой вариант. Киндер в восторге! )) Кому не надо часы/минуты - закоментируют последние строки.
Всем спасибо за помощь )

Код: Выделить всё

$currentYear = date('Y'); // получаем текущий год
$newYear = mktime(0, 0, 0, 1, 1, $currentYear + 1); // высчитываем дату Нового Года
$seconds = $newYear - time();
$days = 0; $hours = 0; $minutes = 0;
$oneMinute = 60;
$oneHour = 60 * $oneMinute;
$oneDay = $oneHour * 24;
if ($seconds / $oneDay > 0) {
$days = (int)($seconds / $oneDay);
$seconds -= $days * $oneDay;
}
if ($seconds / $oneHour > 0) {
$hours = (int)($seconds / $oneHour);
$seconds -= $hours * $oneHour;
}
if ($seconds / $oneMinute > 0) {
$minutes = (int)($seconds / $oneMinute);
$seconds -= $minutes * $oneMinute;
}
sg("ThisComputer.DayFromNY","$days");
sayReply('До Нового Года осталось:'.$days.' '.getNumberWord($days,array('день','дня','дней')),2);
sayReply(''.$hours.' '.getNumberWord($hours,array('час','часа','часов')),2);
sayReply(''.$minutes.' '.getNumberWord($minutes,array('минута','минуты','минут')),2);
За это сообщение автора maksimka поблагодарили (всего 4):
Strangeman (Вт ноя 13, 2018 6:09 pm) • Step40 (Ср ноя 14, 2018 3:40 am) • Ron (Ср ноя 14, 2018 1:27 pm) • Yashalta (Ср ноя 14, 2018 3:34 pm)
Рейтинг: 4.71%
Logrus
Сообщения: 1778
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 296 раз
Поблагодарили: 369 раз

Re: Таймер дней до Нового года

Сообщение Logrus » Вт ноя 13, 2018 4:39 pm

https://connect.smartliving.ru/profile/1646/blog78.html
https://github.com/sergejey/majordomo/s ... NumberWord

Код: Выделить всё

    $array = array(' непрочитанное письмо!',
                   ' непрочитанных письма!',
                   ' непрочитанных писем!');
    say('У Вас ' . $GMailUnread . getNumberWord($GMailUnread, $array), 1);
За это сообщение автора Logrus поблагодарили (всего 3):
maksimka (Вт ноя 13, 2018 4:50 pm) • Strangeman (Вт ноя 13, 2018 6:09 pm) • Yashalta (Ср ноя 14, 2018 3:40 pm)
Рейтинг: 3.53%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Strangeman
Сообщения: 208
Зарегистрирован: Ср янв 16, 2013 6:35 pm
Откуда: Золотарево
Благодарил (а): 99 раз
Поблагодарили: 19 раз
Контактная информация:

Re: Таймер дней до Нового года

Сообщение Strangeman » Вт ноя 13, 2018 6:09 pm

Скоро можно будет перенести в "Готовые решения"? ;)
Основной: Z99Le, Debian 10, модули на ESP-12F с собственной логикой. С сервером связаны, но работоспособны и без него.
Тестовый: Cubieboard2, Armbian Buster (сейчас Bionic) 5.4.y
Аватара пользователя
maksimka
Сообщения: 23
Зарегистрирован: Сб апр 07, 2018 2:04 pm
Откуда: Новосибирск
Благодарил (а): 13 раз
Поблагодарили: 12 раз

Re: Таймер дней до Нового года

Сообщение maksimka » Вт ноя 13, 2018 6:15 pm

Чукча не программист, чукча железячник ) Разбираюсь с функциями... Как только победю - поделюсь результатом )
Аватара пользователя
Strangeman
Сообщения: 208
Зарегистрирован: Ср янв 16, 2013 6:35 pm
Откуда: Золотарево
Благодарил (а): 99 раз
Поблагодарили: 19 раз
Контактная информация:

Re: Таймер дней до Нового года

Сообщение Strangeman » Вт ноя 13, 2018 6:22 pm

maksimka писал(а):
Вт ноя 13, 2018 6:15 pm
Чукча не программист, чукча железячник ) Разбираюсь с функциями... Как только победю - поделюсь результатом )
Желаю удачи, коллега.
Основной: Z99Le, Debian 10, модули на ESP-12F с собственной логикой. С сервером связаны, но работоспособны и без него.
Тестовый: Cubieboard2, Armbian Buster (сейчас Bionic) 5.4.y
fandaymon
Сообщения: 1358
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 38 раз
Поблагодарили: 509 раз

Re: Таймер дней до Нового года

Сообщение fandaymon » Вт ноя 13, 2018 6:56 pm

maksimka писал(а):
Вт ноя 13, 2018 6:15 pm
Чукча не программист, чукча железячник ) Разбираюсь с функциями... Как только победю - поделюсь результатом )
Так а что там разбираться-то? Вместо $days.'дней' вписываем $days.' '.getNumberWord($days,array('день','дня','дней'))
Вместо $hours . 'часов' вписываем $hours.' '.getNumberWord($hours,array('час','часа','часов'))
Вместо $minutes. 'минут' вписываем $minutes.' '.getNumberWord($minutes,array('минута','минуты','минут'))
Аватара пользователя
maksimka
Сообщения: 23
Зарегистрирован: Сб апр 07, 2018 2:04 pm
Откуда: Новосибирск
Благодарил (а): 13 раз
Поблагодарили: 12 раз

Re: Таймер дней до Нового года

Сообщение maksimka » Вт ноя 13, 2018 7:11 pm

Конечный вариант )

Код: Выделить всё

$currentYear = date('Y'); // получаем текущий год
$newYear = mktime(0, 0, 0, 1, 1, $currentYear + 1); // высчитываем дату Нового Года
$seconds = $newYear - time();
$days = 0; $hours = 0; $minutes = 0;
$oneMinute = 60;
$oneHour = 60 * $oneMinute;
$oneDay = $oneHour * 24;
if ($seconds / $oneDay > 0) {
    $days = (int)($seconds / $oneDay);
    $seconds -= $days * $oneDay;
}
if ($seconds / $oneHour > 0) {
    $hours = (int)($seconds / $oneHour);
    $seconds -= $hours * $oneHour;
}
if ($seconds / $oneMinute > 0) {
    $minutes = (int)($seconds / $oneMinute);
    $seconds -= $minutes * $oneMinute;
}
sg("ThisComputer.DayFromNY","$days");
$array = array(' день!',' дня!',' дней!');
sayreply('До нового года осталось ' . $days . getNumberWord($days, $array), 2);
Гуру, подправьте если что не так.
Аватара пользователя
maksimka
Сообщения: 23
Зарегистрирован: Сб апр 07, 2018 2:04 pm
Откуда: Новосибирск
Благодарил (а): 13 раз
Поблагодарили: 12 раз

Re: Таймер дней до Нового года

Сообщение maksimka » Вт ноя 13, 2018 7:14 pm

fandaymon писал(а):
Вт ноя 13, 2018 6:56 pm
maksimka писал(а):
Вт ноя 13, 2018 6:15 pm
Чукча не программист, чукча железячник ) Разбираюсь с функциями... Как только победю - поделюсь результатом )
Так а что там разбираться-то?
Чтоб понять как оно устроено. Я хочу удочку, а рыбу я уж сам добуду )) Но за помощь благодарю )
За это сообщение автора maksimka поблагодарил:
Strangeman (Ср ноя 14, 2018 12:02 pm)
Рейтинг: 1.18%
fandaymon
Сообщения: 1358
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 38 раз
Поблагодарили: 509 раз

Re: Таймер дней до Нового года

Сообщение fandaymon » Вт ноя 13, 2018 8:08 pm

maksimka писал(а):
Вт ноя 13, 2018 7:14 pm
fandaymon писал(а):
Вт ноя 13, 2018 6:56 pm
maksimka писал(а):
Вт ноя 13, 2018 6:15 pm
Чукча не программист, чукча железячник ) Разбираюсь с функциями... Как только победю - поделюсь результатом )
Так а что там разбираться-то?
Чтоб понять как оно устроено. Я хочу удочку, а рыбу я уж сам добуду )) Но за помощь благодарю )
Устроено просто - первый аргумент число, второй - массив из трёх элементов (1й - склонение слова для один, 2й для два-четыре, 3й для остальных). Функция по числу выбирает из 3х элементов нужное склонение
За это сообщение автора fandaymon поблагодарил:
maksimka (Вт ноя 13, 2018 8:21 pm)
Рейтинг: 1.18%
fandaymon
Сообщения: 1358
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 38 раз
Поблагодарили: 509 раз

Re: Таймер дней до Нового года

Сообщение fandaymon » Вт ноя 13, 2018 8:27 pm

maksimka писал(а):
Вт ноя 13, 2018 7:11 pm
Конечный вариант )

Код: Выделить всё

$currentYear = date('Y'); // получаем текущий год
$newYear = mktime(0, 0, 0, 1, 1, $currentYear + 1); // высчитываем дату Нового Года
$seconds = $newYear - time();
$days = 0; $hours = 0; $minutes = 0;
$oneMinute = 60;
$oneHour = 60 * $oneMinute;
$oneDay = $oneHour * 24;
if ($seconds / $oneDay > 0) {
    $days = (int)($seconds / $oneDay);
    $seconds -= $days * $oneDay;
}
if ($seconds / $oneHour > 0) {
    $hours = (int)($seconds / $oneHour);
    $seconds -= $hours * $oneHour;
}
if ($seconds / $oneMinute > 0) {
    $minutes = (int)($seconds / $oneMinute);
    $seconds -= $minutes * $oneMinute;
}
sg("ThisComputer.DayFromNY","$days");
$array = array(' день!',' дня!',' дней!');
sayreply('До нового года осталось ' . $days . getNumberWord($days, $array), 2);
Гуру, подправьте если что не так.
Если нужны только дни, то вполне достаточно

$newYear = mktime(0, 0, 0, 1, 1,date('Y') + 1);
$days=floor(($newYear - time())/86400);
Ответить