За последние 24 часа нас посетили 101459 программистов и 5658 роботов. Сейчас ищут 2578 программистов ...

Нужны дельные советы по проектированию огорода.

Тема в разделе "Прочие вопросы по PHP", создана пользователем skorpion, 1 мар 2012.

  1. skorpion

    skorpion Активный пользователь

    С нами с:
    6 фев 2011
    Сообщения:
    56
    Симпатии:
    1
    Адрес:
    Москва
    Всем привет!
    В этом году мне придётся заняться не программированием а огородом и животными. =)
    Опыта собственно нет, поэтому решил для себя сделать небольшой калькулятор, который поможет уследить хотя бы за огородом.

    Что нужно:
    Берем например морковь:
    вписываем:
    - Номер сектора посадки (например а1)
    - Дата посадки (15 мая)
    - Ориентировочное количество дней 95-100 дней (например 98 дней)

    нужно указать эти данные и получить примерную дату сбора урожая.
    и привинтить нотификатор, мол "через неделю урожай морковки в секторе а1", "сегодня уродай кабачков в секторе 15ф"...

    Дайте пожалуйста наводки и свои соображения.

    И прошу показать как приплюсовать даты, чтобы как то получалось вот такая конструкция: (15 мая плюс 98 дней равно 20 августа)

    Заранее очень благодарен за советы и помощь!
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.372
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Приплюсовать данные средствами PHP можно, например, так:

    Код (PHP):
    1. <?php
    2. $month = 5;
    3. $day = 15;
    4. $year = 2012;
    5. $days = 98;
    6. $end = mktime(0, 0, 0, $month, $day, $year) + (60 * 60 * 24 * $days);
    7. echo(date('d.m.Y', $end));
    8. ?>
    Ну, или так:
    Код (PHP):
    1. <?php
    2. echo(date('d.m.Y', strtotime('15.05.2012 +98 days')));
    3. ?>
     
  3. skorpion

    skorpion Активный пользователь

    С нами с:
    6 фев 2011
    Сообщения:
    56
    Симпатии:
    1
    Адрес:
    Москва
    Спасибо sobachnik!
    Получилось вот что:
    Код (PHP):
    1. <?php
    2. $start_day = "15.05.2012"; //дата посадки
    3. $seedling = "98"; //сколько дней до урожая
    4. $end_day = (date('d.m.Y', strtotime($start_day. ' + ' . $seedling . ' days'))); //расчет конечного дня.
    5. $month_num = array(".01.",".02.",".03.",".04.",".05.",".06.",".07.",".08.",".09.",".10.",".11.",".12."); //ищем месяц в цифрах
    6. $month_abc = array(" Января "," Февраля "," Марта "," Апреля "," Мая "," Июня "," Июля "," Августа "," Сентября "," Октября "," Ноября "," Декабря "); //переводим месяц в буквы
    7. $new_end_day = str_replace($month_num, $month_abc, $end_day); //Создаём печатную дату посадки
    8. $new_start_day = str_replace($month_num, $month_abc, $start_day); //Создаём печатную дату урожая
    9.  
    10. echo <<<HTML
    11. Посажено: {$new_start_day}
    12. <br>
    13. Урожай: {$new_end_day}
    14. HTML;
    15.  
    16. ?>
    Это верная конструкция кода?

    Теперь нужно создать список овощей и разные даты сбора урожая.
    Тоесть сейчас этот код рассчитывает один овощ... Чтобы не дублировать этот код на каждый овощь, можно ли его унифицировать?

    Например создать список:
    Морковь, посажена: 15 мая, зреет: 98 дней, дата сбора уражая (21 Августа 2012).
    Томаты, посажены: 30 мая, зреют: 120 дней, дата сбора уражая (31 Августа 2012).
    Огурцы, посажены: 20 мая, зреют: 44 дня, дата сбора уражая 29 Августа 2012.

    Добавлено спустя 40 минут 17 секунд:
    В общем вот что получилось:
    Код (PHP):
    1. <?php
    2. $data = array();
    3. /*морковь*/
    4. $parnik = array();
    5. $parnik['name'] = "Морковь Фараон";
    6. $parnik['visadka'] = "15.05.2012";
    7. $parnik['vizrevaet'] = "85";
    8. $parnik['sektor_parnika'] = "А1";
    9. $data[0] = $parnik;
    10.  
    11. /*Томаты*/
    12. $parnik = array();
    13. $parnik['name'] = "Томаты Бычье Сердце";
    14. $parnik['visadka'] = "20.05.2012";
    15. $parnik['vizrevaet'] = "120";
    16. $parnik['sektor_parnika'] = "А7";
    17. $data[1] = $parnik;
    18.  
    19. /*Огурцы*/
    20. $parnik = array();
    21. $parnik['name'] = "Огурцы Гектор";
    22. $parnik['visadka'] = "31.05.2012";
    23. $parnik['vizrevaet'] = "44";
    24. $parnik['sektor_parnika'] = "Б3";
    25. $data[2] = $parnik;
    26. /*Овощи кончились, теперь генерируем расчетные данные*/
    27.  
    28.  
    29. $generator_parnika = '';
    30. for ($i = 0; $i < sizeof($data); $i++) {
    31. $number =  $i + 1;
    32.  
    33. // Калькулируем весь список овощей и создаём даты урожая
    34. $start_day = $data[$i]['visadka']; //дата посадки
    35. $seedling = $data[$i]['vizrevaet']; //сколько дней до урожая
    36. $end_day = (date('d.m.Y', strtotime($start_day. ' + ' . $seedling . ' days'))); //расчет конечного дня.
    37. $month_num = array(".01.",".02.",".03.",".04.",".05.",".06.",".07.",".08.",".09.",".10.",".11.",".12."); //ищем месяц в цифрах
    38. $month_abc = array(" Января "," Февраля "," Марта "," Апреля "," Мая "," Июня "," Июля "," Августа "," Сентября "," Октября "," Ноября "," Декабря "); //переводим месяц в буквы
    39. $new_end_day = str_replace($month_num, $month_abc, $end_day); //Создаём печатную дату посадки
    40. $new_start_day = str_replace($month_num, $month_abc, $start_day); //Создаём печатную дату урожая
    41.  
    42.  
    43. // Генерируем HTML
    44. $generator_parnika .=  <<<HTML
    45. \n
    46. Номер: {$number}<br />
    47. Название: {$data[$i]['name']}<br />
    48. Дата высадки: {$new_start_day}<br />
    49. Урожай: {$new_end_day}<br>
    50. Дней вызревает: {$data[$i]['vizrevaet']}<br />
    51. Сектор парника: {$data[$i]['sektor_parnika']}<br />
    52. <br />
    53. <br />
    54. HTML;
    55.  
    56. }
    57.  
    58.  
    59. // Дополнительные данные для расчета, для информера...
    60. $segodna = date("d-m-Y");
    61. $informer = <<<HTML
    62.  
    63. Сегодня: {$segodna}, через 10 дней высаживаем
    64. томаты, (А в конце лета тут этот же информер должен сообщать что через 8 дней собираем Томаты)
    65.  
    66. HTML;
    67.  
    68. // Воводим готовый результат в таблицу
    69. echo <<<HTML
    70. <table>
    71.     <tr>
    72.         <th>
    73.             {$informer}
    74.         </th>
    75.     </tr>
    76.     <tr>
    77.         <td>
    78.             {$generator_parnika}
    79.         </td>
    80.     </tr>
    81. </table>
    82.  
    83. HTML;
    84.  
    85. ?>
    Я всё верно делаю?

    Можно оформлять в красивую оболочку?
    Или пересобирать код?

    Добавлено спустя 10 минут 8 секунд:
    Опять столкнулся с проблемой...

    Помогите составить конструкцию этого кода чтобы производилось сопоставление даты, чтобы информировало
    два раза...

    Первый информер сообщал ближайшую дату посадки отталкиваясь от от текущего дня $segodna = date("d-m-Y"); и высчитывая разницу $data[$i]['visadka'], мол "Через семь дней нужно высадить Томаты".. или "Сейчас зима, ничего не растёт.." =)

    Второй информер высчитывал сопоставление даты сбора урожая отталкиваясь от $new_end_day,... мол "Через семь дней пора собирать кабачки"...
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    вот и курсач готов