Страница 1 из 1

timeBetween

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

Буду сильно благодарен за помощь, все мы когда то начинали, зато я спец по интернет рекламе.

Re: timeBetween

Добавлено: Пн сен 10, 2018 10:58 am
skysilver
Ничего не нужно дополнительно получать. timeBetween() сама возьмет текущее время, сравнит его с указанным диапазонов и выдаст true или false.

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

if (timeBetween("08:00", "12:00")) {
  say('Время между 8 и 12 часами');
} else {
  say('Другое время');
}

Re: timeBetween

Добавлено: Вт сен 18, 2018 3:19 pm
Step40
Добрый день решил не плодить новую тему спрошу тут
наткнулся на такое свойство ThisComputer.testProp
Не подскажите что его использует?

Re: timeBetween

Добавлено: Вт сен 18, 2018 3:26 pm
skysilver
Step40 писал(а):
Вт сен 18, 2018 3:19 pm
Добрый день решил не плодить новую тему спрошу тут
наткнулся на такое свойство ThisComputer.testProp
Не подскажите что его использует?
Вбей в поиск в админке. Если ничего не найдет, то можешь удалить. А если найдет, что сразу видно будет, что использует.

Re: timeBetween

Добавлено: Сб апр 27, 2019 1:59 am
Strangeman
Вдруг кому пригодится. timeBetween('23:00','01:00') работает корректно, т.е. переход через 0:00 не проблема.

Re: timeBetween

Добавлено: Ср мар 11, 2020 3:10 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 сценарий работал без проблем.

Re: timeBetween

Добавлено: Ср мар 11, 2020 10:00 pm
xor
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


Re: timeBetween

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

Re: timeBetween

Добавлено: Пт мар 13, 2020 11:39 pm
xor
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;
}