значение формы 00:00:00 в значение времени - PullRequest
1 голос
/ 17 августа 2011

Мне было интересно, если я записываю время через функцию javascript и говорю, что оставляю его включенным на 2 минуты 20 секунд:

00.02.20

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

Я думаю, что это происходит из-за того, как я запрашиваю данные:

$length = mysql_escape_string($_REQUEST['timeDrive']);

есть ли способ преобразовать это во время, котороесобираюсь вывести точное значение:

00.02.20

спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Если вам не нужно выполнять какие-либо математические функции в этих полях (например, сумма, среднее и т. Д.), И это чисто для отображения, то вы можете просто сохранить его в виде простого текста в поле CHAR(8).

В противном случае вам нужно нормализовать его до некоторой единицы. Я бы посоветовал, может быть, как целое число от общего количества секунд (если это достаточно точно для вас).

Для преобразования в секунды:

 $val = "00.02.20";
 $parts = explode(".", $val);   // ['00', '02', '20']
 $totalSeconds = parts[0] * 3600 + parts[1] * 60 + parts[2]; // 140

И преобразовать его обратно:

$seconds = 140; // this would be read from the database, or something

printf("%02d.%02d.%02d",
    $seconds / 3600,
    ($seconds / 60) % 60,
    $seconds % 60
);
2 голосов
/ 17 августа 2011

Нет, не просто так.

Это было бы возможно, если вы сделаете это просто проще и просто посчитаете количество секунд в javascript.В вашей базе данных вы можете сохранить его как целое число или что-то в этом роде.

Другой способ - сохранить его как строку, но тогда вы не сможете сравнить время.

Ну, я бысохраните его как целое число, и если вы хотите показать время кому-либо, вам придется отформатировать его раньше, например:

function formatTime($seconds) {
    $hours = floor($seconds / 3600);        //by nickf
    $minutes = floor($seconds / 60) % 60; 
    $sec = $seconds % 60;
    $retHr = (strlen($hours) == 1 ? "0" . $hours : $minutes);
    $retMin = (strlen($minutes) == 1 ? "0" . $minutes : $minutes);
    $retsec = (strlen($sec) == 1 ? "0" . $sec : $sec);
    return $retHr . "." . $retMin . "." . $retsec;
}

//now you counted one hour, two minutes and three seconds, you call it like 
echo formatTime(3723);
//... and it outputs "01.02.03"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...