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

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

Добавлено: Вт июл 15, 2014 7:29 pm
alex546
задача как сложить время, азбуку прочитал и не догнал
есть свойство которое отвечает за время начала полива газона 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);

где ошибка, или где почитать на тему как сложить время.

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

Добавлено: Вт июл 15, 2014 10:46 pm
sergejey
Функции складывания времени сейчас нет. Могу предложить такой вариант:

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

$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);
} 

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

Добавлено: Ср июл 16, 2014 7:40 am
denis
я тоже для полива использовал объекты, но чтобы не парить мозг со сложением у меня есть два объекта:
на примере ТС
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 дня - то куда переставить новое значение? Вообщем пока только черновик накидал алгоритма, т.к. нужно учесть как можно больше вариантов сочетаний по изменению расписания.

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

Добавлено: Ср июл 16, 2014 8:47 am
vtec
Может так:

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

$dateStart = '20:00';
$dateLong = '45 minutes';
$dateEnd = date('H:i', strtotime("+$dateLong", strtotime($dateStart)));
echo $dateEnd;

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

Добавлено: Чт июл 24, 2014 8:19 pm
alex546
Всем спасибо, запустил на примере Сергея.
Теперь травка не засохнет.

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

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