задача как сложить время, азбуку прочитал и не догнал
есть свойство которое отвечает за время начала полива газона 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);
где ошибка, или где почитать на тему как сложить время.
Складывание времени
Модератор: immortal
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Складывание времени
Функции складывания времени сейчас нет. Могу предложить такой вариант:
Код: Выделить всё
$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 -- информация, сотрудничество, услуги
-
- Сообщения: 284
- Зарегистрирован: Сб ноя 24, 2012 11:47 am
- Благодарил (а): 32 раза
- Поблагодарили: 28 раз
Re: Складывание времени
я тоже для полива использовал объекты, но чтобы не парить мозг со сложением у меня есть два объекта:
на примере ТС
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 дня - то куда переставить новое значение? Вообщем пока только черновик накидал алгоритма, т.к. нужно учесть как можно больше вариантов сочетаний по изменению расписания.
на примере ТС
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: Складывание времени
Может так:
Код: Выделить всё
$dateStart = '20:00';
$dateLong = '45 minutes';
$dateEnd = date('H:i', strtotime("+$dateLong", strtotime($dateStart)));
echo $dateEnd;
-
- Сообщения: 284
- Зарегистрирован: Сб ноя 24, 2012 11:47 am
- Благодарил (а): 32 раза
- Поблагодарили: 28 раз
Re: Складывание времени
alex546, такой практический вопрос про полив. Если отключится электричество, время start и end пройдет (т.е. по условию текущее время явно больше и открывать ничего не нужно), то как система поймет, что время start нужно переустановить? У меня объект дача далеко, и иногда все возможно. А там никакими бесперебойниками не спасешься, только если очень огромными. Кроме того, если был перерыв, то следовало бы начать полив сразу после подачи электричества.