Складывание времени

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

Модератор: immortal

Ответить
alex546
Сообщения: 8
Зарегистрирован: Пт фев 21, 2014 10:10 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Складывание времени

Сообщение alex546 » Вт июл 15, 2014 7:29 pm

задача как сложить время, азбуку прочитал и не догнал
есть свойство которое отвечает за время начала полива газона gardena.start ему присвоено 20:00
есть свойство gardena.long ему присвоено 00:45
Нужно свойству gardena.end присвоить 20:45

есть код который присваивает требуемому свойству некую цифру далекую от 20:45
$GardenaStart = gg('gardena.start');
$GardenaLong = gg('gardena.long');
$GardenaEnd = $GardenaStart +$Gardena.Long;
sg("gardena.end", $GardenaEnd);

где ошибка, или где почитать на тему как сложить время.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Складывание времени

Сообщение sergejey » Вт июл 15, 2014 10:46 pm

Функции складывания времени сейчас нет. Могу предложить такой вариант:

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

$GardenaStart = gg('gardena.start');
$GardenaLong = gg('gardena.long');
$realTimeStart=timeConvert($GardenaStart);
if (preg_match('/^(\d+):(\d+)$/', $GardenaLong, $m)) {
   $hour=(int)$m[1];
   $minute=(int)$m[2];
   $realTimeEnd=$realTimeStart+$hour*60*60+$minute*60;
   $GardenaEnd=date('H:i',$realTimeEnd);
   sg("gardena.end", $GardenaEnd);
} 

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
denis
Сообщения: 284
Зарегистрирован: Сб ноя 24, 2012 11:47 am
Благодарил (а): 32 раза
Поблагодарили: 28 раз

Re: Складывание времени

Сообщение denis » Ср июл 16, 2014 7:40 am

я тоже для полива использовал объекты, но чтобы не парить мозг со сложением у меня есть два объекта:
на примере ТС
gardena.timeStart - собственно время в формате сколько секунд с 1980 года, и с этим значением можно делать что угодно, складывать, отнимать и прочее. добавить 4 минуты = gardena.timeStart + 4*60 или сложить gardena.timeStart + gardena.Long

и второе объект, который используется только для вывода на экран, но меняется при каждом изменении gardena.timeStart
gardena.timeStartFormatted - значение в человекоподобном формате "20:45"

Так мне показалось проще и понятнее, чем каждый раз "разбирать значения". Кроме того! Полив зачастую надо делать 1 раз 2 дня, 2 раза в день, 1 раз в 3 дня - и каждый раз разбирать время неудобно, а так отформатировал как душе угодно второе значение и все ОК!

p.s. только с поливом есть некоторые тонкости если например комп выключался, а время полива уже прошло? Начинать полив сразу же?) растения могут не порадоваться. А откуда брать новый отсчет времени?) А если 1 раз 3 дня - то куда переставить новое значение? Вообщем пока только черновик накидал алгоритма, т.к. нужно учесть как можно больше вариантов сочетаний по изменению расписания.
vtec
Сообщения: 54
Зарегистрирован: Пн янв 20, 2014 7:35 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Складывание времени

Сообщение vtec » Ср июл 16, 2014 8:47 am

Может так:

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

$dateStart = '20:00';
$dateLong = '45 minutes';
$dateEnd = date('H:i', strtotime("+$dateLong", strtotime($dateStart)));
echo $dateEnd;
alex546
Сообщения: 8
Зарегистрирован: Пт фев 21, 2014 10:10 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Складывание времени

Сообщение alex546 » Чт июл 24, 2014 8:19 pm

Всем спасибо, запустил на примере Сергея.
Теперь травка не засохнет.
denis
Сообщения: 284
Зарегистрирован: Сб ноя 24, 2012 11:47 am
Благодарил (а): 32 раза
Поблагодарили: 28 раз

Re: Складывание времени

Сообщение denis » Пт июл 25, 2014 12:23 pm

alex546, такой практический вопрос про полив. Если отключится электричество, время start и end пройдет (т.е. по условию текущее время явно больше и открывать ничего не нужно), то как система поймет, что время start нужно переустановить? У меня объект дача далеко, и иногда все возможно. А там никакими бесперебойниками не спасешься, только если очень огромными. Кроме того, если был перерыв, то следовало бы начать полив сразу после подачи электричества.
Ответить