Как складывать и вычитать время?

Тема в разделе "PHP программирование", создана пользователем BIFF, 5 авг 2010.

  1. BIFF

    BIFF Гость

    Например в Excel если вычесть от 18:37 - 17:37 будет равно 1:00. Или 18:37 - 18:34 = 0:03
    А попытался вычесть время преобразовав его с помощь StrToTime().

    Код (PHP):
    $dateTime01 = $_POST[times];
    $dateTime02 = $_POST[timevalue];
    //

    $dateTime1 = StrToTime($dateTime01);
    $dateTime2 = StrToTime($dateTime02);
    //
    $dateTime4 = ($dateTime1 - $dateTime2);
    $_POST[time] = date("H:i",$dateTime4);
    Но на выходе $_POST[time] записывает не разницу во времени.

    Например если $_POST[times]; равно 16:41
    а $_POST[timevalue]; равно 16:46

    При вычитании 2-го из первого должно быть так 00:05
    но почему-то в базе данных записывается так 16:45
     
  2. BIFF

    BIFF Гость

    sax_ol это окончательный параметр, который заносится в базу данных.
     
  3. BIFF

    BIFF Гость

    Что бы передавать, вот так.
    $query = "INSERT INTO anketa VALUES ('$_POST[time]')";
     
  4. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    Алгоритм мегатупой, но все-таки:
    а) ты отнимаешь от 16:41 16:45
    б) если время поставить правильно, то вычисляется всё правильно (фе какая гадость алгоритм...)
    в) передавать параметры для записи в бд постом - фу.
    ..не надо ничего писать, почитай книги, от твоего творения не будет толку всё равно.
     
  5. BIFF

    BIFF Гость

    Книжки читал и читаю.
    Уже решил задачу, проект готов на 90%...

    Вы не правы я все правильно отнимал.
    times>timevalue

    Теперь надеюсь не гадость.
    А вот и решение, надо было просто date заменить на gmdate)

    Код (PHP):
    $t1 = StrToTime($_POST[times]);
    $t2 = StrToTime($_POST[timevalue]);
    $t3 = $t1 - $t2;
    $_POST[time] = gmdate('H:i', $t3);
    Значит есть такая надобность и почему фу?

    В место помощи одна критика, лучше просто помогли бы новичку, если конечно сами знаете...
     
  6. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    уфф..
    Если читаете книжки, то должны знать, что все операции над временем удобне всего производить в формате времени UNIX, где время представлено как простое число. Найдите это главу у себя в книге. Это раз. По этому алгоритм на самом деле фу.
    А код ваш - еще большее фу и рассадник дыр. Опять же, у себя в книге найдите про mysql_real_escape_string(), Sql injection, фильтрацию передаваемых данных..
     
  7. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    BIFF
    на свой страх и риск я выполнил этот чудо-код, и представьте себе, он работает! так что замена date на gmdate всего лишь помогла занести правильно время в бд в вашем конкретном случае, но кто знает что будет при других настройках php/mysql.
    1) Объясните пжс, зачем такая острая необходимость использования $_POST - вы придумали очень оригинальную бизнес-логику (мне честно интересно зачем так передавать данные)
    2) Зачем дублировать переменные: $dateTime01, $dateTime1 (всего алгоритма у меня перед глазами нету, может так и надо, но....)?
    3) Кто вас научил обзывать переменные 01, 02... эта привычка может очень разозлить вас через года 2, когда придется что-то доделывать на этом проекте (хотя желаю вам не встретиться с ним через пару лет)
    4) Рекомендую все-таки к критике относиться с уважением, всё-таки тут опытные люди собрались.
     
  8. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    и как это относится к 01 02?
    в любых code requirements написано, что переменные нельзя обзывать time1 time2 time3.... это совершенно не отражает их назначение, разве так сложно написать timeStart, timeEnd?
     
  9. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    ^^Вот это скл инжекшен в классическом виде. Как в учебнике.
    почему бы не написать в одну строку? Читабельность не пострадает.
    Вот это сами понимаете.. Я вообще-то всегда думал что этот массив ридонли. Акорн, а вы на еррор_репортинг(е_олл) пробовали? Там же как минимум нотайс должен быть..
    Вообще-то, дейт просто позволяет форматировать время. А гмдейт - делает тоже самое, только возвращает время по гринвичу(GMT). Как бе, вы не совсем понимаете, что делаете..

    Добавлено:
    Вот так тоже делать нельзя. Хотя бы потому, что таких переменных банально может не быть передано -> получим нотис\варнинг и скрипт упадет.
    их нуна обработать по типу
    $datetime01= isset($_POST[times])?$_POST[times]:exit();
     
  10. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    да ну? Насколько я понимаю, записывать в базу будет другой скрипт обработчик. Поэтому данные о времени в пост и запихиваются. Собсно.. А что мне мешает сверстать маааленькую хтмл формочку которая будет передавать кавычку в перменной $_POST['time'] напрямую тому обработчику?
     
  11. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    я с date() делал, для gmdate() какие параметры не вспомню сразу.

    вот когда разрастутся у вас скрипты по 1000 строк - поймете.. есть опыт.

    Eclipse сам допишет название пременной, если надо... и время, которое тратится на написание лишних 5 символов не столько существенно.. а в других местах скрипта вы уже можете выбрать один из трёх вариантов с нужным вам окончанием.
     
  12. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    Почему?

    Пс.
    Та не ходил я к еврпеану.. Мы скайпом ограничились. И беседы наши далекти от веба были) Так что нефиг на него наехжать. Вот придет он и ответти)
     
  13. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    P.S. какой-то говнокод вызвал столько обсуждений :sorry:
     
  14. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    не всегда.. хотя 5 лет маленький опыт, не могу ничего сказать по этому поводу.



    предлагаю покопаться в настройках

    что за бред, цитату в студию
     
  15. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    какой оператор = покроет потуги? откуда он возьмется если выполняется тупо:

     
  16. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    ^^Вот это будет _до_ передачи постом параметра для записи в бд. А я говорю о вклинивании именно перед записью в базу..

    Добавлено: И вообще. :fuckyou: :sorry:
    Только вот топикстартера испугали..
     
  17. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.470
    Симпатии:
    27
    Из лесу вестимо=) Все-таки я говорю не об абстракном куске кода, а о всем скрипте..
     
  18. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    sax_ol
    пользователь написал что он будет делать после с этим постом, об этой дыре и шла речь.. так что нить утеряна вами :sorry:
     
  19. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    да ткнул уже... могу еще:
     
  20. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    sax_ol
    взаимно..
    есть два скрипта
    а) запихиваем в пост time
    б) берем из поста time

    так почему нельзя миновать скрипт а), сделав вместо него форму, и отправить запрос скрипту б)?
     
Загрузка...

Поделиться этой страницей