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

  • Автор темы BIFF
  • Дата начала
B

BIFF

#1
Например в 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
 
B

BIFF

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

acorn

PHP Developer
29.08.2004
585
3
#4
Алгоритм мегатупой, но все-таки:
а) ты отнимаешь от 16:41 16:45
б) если время поставить правильно, то вычисляется всё правильно (фе какая гадость алгоритм...)
в) передавать параметры для записи в бд постом - фу.
..не надо ничего писать, почитай книги, от твоего творения не будет толку всё равно.
 
B

BIFF

#5
..не надо ничего писать, почитай книги, от твоего творения не будет толку всё равно.
Книжки читал и читаю.
Уже решил задачу, проект готов на 90%...

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

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

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

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

vital

Больной Компом Детектед
29.01.2006
2 432
34
#6
уфф..
Если читаете книжки, то должны знать, что все операции над временем удобне всего производить в формате времени UNIX, где время представлено как простое число. Найдите это главу у себя в книге. Это раз. По этому алгоритм на самом деле фу.
А код ваш - еще большее фу и рассадник дыр. Опять же, у себя в книге найдите про mysql_real_escape_string(), Sql injection, фильтрацию передаваемых данных..
 

acorn

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

acorn

PHP Developer
29.08.2004
585
3
#8
У нас переменные обзываются - up, dt, ... и нет проблем. Что то вы перечитались.
и как это относится к 01 02?
в любых code requirements написано, что переменные нельзя обзывать time1 time2 time3.... это совершенно не отражает их назначение, разве так сложно написать timeStart, timeEnd?
 

vital

Больной Компом Детектед
29.01.2006
2 432
34
#9
"INSERT INTO anketa VALUES ('$_POST[time]')";
^^Вот это скл инжекшен в классическом виде. Как в учебнике.
$t1 = StrToTime($_POST[times]); $t2 = StrToTime($_POST[timevalue]); $t3 = $t1 - $t2; $_POST[time] = gmdate('H:i', $t3);
почему бы не написать в одну строку? Читабельность не пострадает. Вот это сами понимаете.. Я вообще-то всегда думал что этот массив ридонли. Акорн, а вы на еррор_репортинг(е_олл) пробовали? Там же как минимум нотайс должен быть.. Вообще-то, дейт просто позволяет форматировать время. А гмдейт - делает тоже самое, только возвращает время по гринвичу(GMT). Как бе, вы не совсем понимаете, что делаете..

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

vital

Больной Компом Детектед
29.01.2006
2 432
34
#10
ам он сам!!! инициализирует
да ну? Насколько я понимаю, записывать в базу будет другой скрипт обработчик. Поэтому данные о времени в пост и запихиваются. Собсно.. А что мне мешает сверстать маааленькую хтмл формочку которая будет передавать кавычку в перменной $_POST['time'] напрямую тому обработчику?
 

acorn

PHP Developer
29.08.2004
585
3
#11
Цитата:
Вот это сами понимаете.. Я вообще-то всегда думал что этот массив ридонли. Акорн, а вы на еррор_репортинг(е_олл) пробовали? Там же как минимум нотайс должен быть..
я с date() делал, для gmdate() какие параметры не вспомню сразу.

Цитата:
А кому это надо? Кто их читает? главное чтобы понятно было в контексте, а чем длиннее тем хуже.
вот когда разрастутся у вас скрипты по 1000 строк - поймете.. есть опыт.

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

vital

Больной Компом Детектед
29.01.2006
2 432
34
#12
оператор = ваши потуги потроет в одночасие.
Почему?

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

acorn

PHP Developer
29.08.2004
585
3
#13
P.S. какой-то говнокод вызвал столько обсуждений :sorry:
 

acorn

PHP Developer
29.08.2004
585
3
#14
с опытом скрипты стаовятся меньше, ага!
не всегда.. хотя 5 лет маленький опыт, не могу ничего сказать по этому поводу.



Да ну? какойто интелектуал.. а вот нам не дописывает, что мы делаем не так?
предлагаю покопаться в настройках

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

acorn

PHP Developer
29.08.2004
585
3
#15
вы не поняли, коде инсайд и так работает, и ему пофик из скольки букв, только одно но, он не умеет называть, приходится всетаки самим.
и время, которое тратится на написание лишних 5 символов не столько существенно.. а в других местах скрипта вы уже можете выбрать один из трёх вариантов с нужным вам окончанием.
Разрешаю сверстать ДВЕ! и не маленькие, а офигенно здоровые, только потом оператор = ваши потуги потроет в одночасие.
какой оператор = покроет потуги? откуда он возьмется если выполняется тупо:

$query = "INSERT INTO anketa VALUES ('$_POST[time]')";
 

vital

Больной Компом Детектед
29.01.2006
2 432
34
#16
^^Вот это будет _до_ передачи постом параметра для записи в бд. А я говорю о вклинивании именно перед записью в базу..

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

vital

Больной Компом Детектед
29.01.2006
2 432
34
#17
Из лесу вестимо=) Все-таки я говорю не об абстракном куске кода, а о всем скрипте..
 

acorn

PHP Developer
29.08.2004
585
3
#18
sax_ol
пользователь написал что он будет делать после с этим постом, об этой дыре и шла речь.. так что нить утеряна вами :sorry:
 

acorn

PHP Developer
29.08.2004
585
3
#20
sax_ol
взаимно..
есть два скрипта
а) запихиваем в пост time
б) берем из поста time

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