timeBetween

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

Модератор: immortal

Ответить
Step40
Сообщения: 112
Зарегистрирован: Сб июл 14, 2018 11:31 am
Откуда: Волгоград
Благодарил (а): 90 раз
Поблагодарили: 7 раз

timeBetween

Сообщение Step40 » Пн сен 10, 2018 10:25 am

Добрый день
Помогите пожалуйста человеку который только 6 часов назад стал учить php. Но я талантливый освою. Кое что уже получается но тут застрял.
Мне надо сделать что бы скрипт которые читает новости (rrs модуль) читал их только в интервале времени с 08:00 до 14:00
самым своим достойным местом чувствую что надо использовать функцию timeBetween
Но ни фига не соображу как ее использовать
$timeNow = time(); //Тут понятно переменная получает текущее время
А как проверить что переменная входит диапазон определенный timeBetween?
timeBetween("08:00", "12:00");

Буду сильно благодарен за помощь, все мы когда то начинали, зато я спец по интернет рекламе.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: timeBetween

Сообщение skysilver » Пн сен 10, 2018 10:58 am

Ничего не нужно дополнительно получать. timeBetween() сама возьмет текущее время, сравнит его с указанным диапазонов и выдаст true или false.

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

if (timeBetween("08:00", "12:00")) {
  say('Время между 8 и 12 часами');
} else {
  say('Другое время');
}
За это сообщение автора skysilver поблагодарили (всего 2):
Step40 (Пн сен 10, 2018 11:50 am) • Molostov (Пн сен 10, 2018 9:01 pm)
Рейтинг: 2.33%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Step40
Сообщения: 112
Зарегистрирован: Сб июл 14, 2018 11:31 am
Откуда: Волгоград
Благодарил (а): 90 раз
Поблагодарили: 7 раз

Re: timeBetween

Сообщение Step40 » Вт сен 18, 2018 3:19 pm

Добрый день решил не плодить новую тему спрошу тут
наткнулся на такое свойство ThisComputer.testProp
Не подскажите что его использует?
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: timeBetween

Сообщение skysilver » Вт сен 18, 2018 3:26 pm

Step40 писал(а):
Вт сен 18, 2018 3:19 pm
Добрый день решил не плодить новую тему спрошу тут
наткнулся на такое свойство ThisComputer.testProp
Не подскажите что его использует?
Вбей в поиск в админке. Если ничего не найдет, то можешь удалить. А если найдет, что сразу видно будет, что использует.
За это сообщение автора skysilver поблагодарили (всего 2):
Step40 (Вт сен 18, 2018 4:04 pm) • ~220v (Вт май 19, 2020 4:03 pm)
Рейтинг: 2.33%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Strangeman
Сообщения: 208
Зарегистрирован: Ср янв 16, 2013 6:35 pm
Откуда: Золотарево
Благодарил (а): 101 раз
Поблагодарили: 19 раз
Контактная информация:

Re: timeBetween

Сообщение Strangeman » Сб апр 27, 2019 1:59 am

Вдруг кому пригодится. timeBetween('23:00','01:00') работает корректно, т.е. переход через 0:00 не проблема.
За это сообщение автора Strangeman поблагодарил:
Molostov (Вт май 21, 2019 5:40 pm)
Рейтинг: 1.16%
Основной: Z99Le, Debian 10, модули на ESP-12F с собственной логикой. С сервером связаны, но работоспособны и без него.
Тестовый: Cubieboard2, Armbian Buster (сейчас Bionic) 5.4.y
Kapico
Сообщения: 5
Зарегистрирован: Чт фев 13, 2020 4:27 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: timeBetween

Сообщение Kapico » Ср мар 11, 2020 3:10 pm

Добрый день.

Есть сценарий, который включает или выключает простое устройство (лампа по mqtt) два раза в день в определенные периоды:

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

if (timeBetween('06:10', getGlobal('ThisComputer'.'.'.'SunRiseTime')) || timeBetween(getGlobal('ThisComputer'.'.'.'SunSetTime'), '22:00')) {
 	callMethod("Relay01.turnOn");
} else {
	callMethod("Relay01.turnOff");
}
На пробных коротких периодах сценарий работает без замечаний. Проблема в том, что при первом запуске с указанными границами вечерний период отрабатывается хорошо - устройство включается и выключается. Но дальше идет сбой - ночью сценарий включает устройство и весь день дает команду на включение. Вечером сценарий выключает устройство в 22:00, а ночью опять включает. Через запись в логи выяснилось в 00:00 сценарий начинает упорно включать устройство и посылает команду на выключение только в 22:00. В чем подвох? Самое обидно, что на предыдущей установке MajorDoMo сценарий работал без проблем.
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: timeBetween

Сообщение xor » Ср мар 11, 2020 10:00 pm

Kapico писал(а):Добрый день.

Есть сценарий, который включает или выключает простое устройство (лампа по mqtt) два раза в день в определенные периоды:

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

if (timeBetween('06:10', getGlobal('ThisComputer'.'.'.'SunRiseTime')) || timeBetween(getGlobal('ThisComputer'.'.'.'SunSetTime'), '22:00')) {
 	callMethod("Relay01.turnOn");
} else {
	callMethod("Relay01.turnOff");
}
На пробных коротких периодах сценарий работает без замечаний. Проблема в том, что при первом запуске с указанными границами вечерний период отрабатывается хорошо - устройство включается и выключается. Но дальше идет сбой - ночью сценарий включает устройство и весь день дает команду на включение. Вечером сценарий выключает устройство в 22:00, а ночью опять включает. Через запись в логи выяснилось в 00:00 сценарий начинает упорно включать устройство и посылает команду на выключение только в 22:00. В чем подвох? Самое обидно, что на предыдущей установке MajorDoMo сценарий работал без проблем.
Похоже, что в полночь во время заката прописывается 0:0 и это шурует до 22 вечера. Попробуйте заменить на константы ваш закат/рассвет для временного использования. А в это время поразбирайтесь, когда и как у вас закат/рассвет формируются. Есть альтернатива вашему скрипту. Там, где вычисляются закат/рассвет можно сразу и создать 4 шедуледджоба на включение по времени и выключение

Отправлено с моего Redmi 4X через Tapatalk

За это сообщение автора xor поблагодарил:
Kapico (Пт мар 13, 2020 10:54 am)
Рейтинг: 1.16%
Kapico
Сообщения: 5
Зарегистрирован: Чт фев 13, 2020 4:27 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: timeBetween

Сообщение Kapico » Пт мар 13, 2020 11:15 am

Спасибо за наводку, дело было в значениях рассвета/заката. Значения брались с сайта, и брались нормально, только с секундами, например '19:46:25'. А как показало исследование, функция timeBetween работает с использованием функции timeConvert, которая в свою очередь выцарапывает из строки только часы и минуты. Таким образом, параметр с секундами не возвращал значения функции вообще и, следовательно, условия плясали от пустого значения. Взял данные с другого сайта без секунд и все работает.
За наводку на скрипт спасибо, позже посмотрю.
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: timeBetween

Сообщение xor » Пт мар 13, 2020 11:39 pm

Kapico писал(а):
Пт мар 13, 2020 11:15 am
Спасибо за наводку, дело было в значениях рассвета/заката. Значения брались с сайта, и брались нормально, только с секундами, например '19:46:25'. А как показало исследование, функция timeBetween работает с использованием функции timeConvert, которая в свою очередь выцарапывает из строки только часы и минуты. Таким образом, параметр с секундами не возвращал значения функции вообще и, следовательно, условия плясали от пустого значения. Взял данные с другого сайта без секунд и все работает.
За наводку на скрипт спасибо, позже посмотрю.
вы ещё берёте восход/закат с внешнего сайта?((
проще рассчитывать их локально же!
скрипт типа (или на форуме посмотреть date_sun_info)

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

//$lat=gg('ThisComputer.latitude');   // широта
//$long=gg('ThisComputer.longitude'); // долгота
$lat=55.4734;
$long= 37.7848;
$sun_info = date_sun_info(time(), $lat, $long);
//print_r($sun_info);

  $sunrise = $sun_info['sunrise'];
  echo 'Восход: '.date("H:i", $sunrise).'<br>';
  sg('weather_my.SunRise',date("H:i", $sunrise));

  $sunset =  $sun_info['sunset'];
  $day_length = $sunset - $sunrise;

  echo 'Заход: '.date("H:i", $sunset).'<br>';
  echo 'Долгота дня: '.gmdate("H:i", $day_length).'<br>';
  sg('weather_my.SunSet',date("H:i", $sunset));
  sg('weather_my.LongTag',gmdate("H:i", $day_length));

  echo 'В зените: '.date("H:i", $sun_info['transit']).'<br>';
  sg('weather_my.Transit',date("H:i", $sun_info['transit']));

  $civil_twilight_begin = $sun_info['civil_twilight_begin'];
  echo 'Начало утренних сумерек: '.date("H:i", $civil_twilight_begin).'<br>';
  sg('weather_my.civil_begin',date("H:i", $civil_twilight_begin));

  $civil_twilight_end = $sun_info['civil_twilight_end'];
  echo 'Конец вечерних сумерек: '.date("H:i", $civil_twilight_end).'<br>';
  sg('weather_my.civil_end',date("H:i", $civil_twilight_end));
  
//учтём сезон
$month_num = (int)date('m');
if($month_num>4 && $month_num<10){
 $season = -1;
 $sunrise = $civil_twilight_begin;//для лета утренние сумерки
}else{
 $season = 1;
}

За это сообщение автора xor поблагодарили (всего 3):
Kapico (Чт мар 26, 2020 1:28 pm) • ImHuman (Пт апр 17, 2020 12:14 am) • Мазур (Пн авг 08, 2022 10:18 am)
Рейтинг: 3.49%
Ответить