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

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

Наш партнер Genesis Hackspace
  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
    Web Team

    Регистрация:
    29 авг 2004
    Сообщения:
    585
    Симпатии:
    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 Больной Компом Детектед

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

    acorn PHP Developer
    Web Team

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

    acorn PHP Developer
    Web Team

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

    vital Больной Компом Детектед

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

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

    vital Больной Компом Детектед

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

    acorn PHP Developer
    Web Team

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

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

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

    vital Больной Компом Детектед

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

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

    acorn PHP Developer
    Web Team

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

    acorn PHP Developer
    Web Team

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



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

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

    acorn PHP Developer
    Web Team

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

     
  16. vital

    vital Больной Компом Детектед

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

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

    vital Больной Компом Детектед

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

    acorn PHP Developer
    Web Team

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

    acorn PHP Developer
    Web Team

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

    acorn PHP Developer
    Web Team

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

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

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