Какой тип данных MySQL использовать для планирования? - PullRequest
0 голосов
/ 30 октября 2011

Я хочу записать время начала и окончания, скажем, фильмов, которые играют в кинотеатрах.Мне нужно сохранить дату (например, 1 января 2011 года), время начала (например, 9:00 утра) и время окончания (например, 11 утра).Должен ли я использовать DateTime?Я видел некоторые реализации, в которых INT используется для представления времени в минутах (например, 0 = 12 ночи, 1 = 12:01 и т. Д.).Я не уверен, есть ли какая-то польза от использования INT над DateTime.

Предложения?

РЕДАКТИРОВАТЬ 1:

Расширение наИдея использования INT, как описано выше, таблица, вероятно, будет иметь следующие столбцы:

  • дата (например, 1 января 2011 г.)
  • start_time (например, 540 - для указания 9 утра)
  • end_time (например, 660 - для указания 11:00)

Ответы [ 5 ]

5 голосов
/ 30 октября 2011

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

2 голосов
/ 30 октября 2011

Для меня лучше использовать столбцы DateTime, потому что INT имеет скрытую интерпретацию. Без документации вы не знаете, что это на самом деле: секунды, минуты, месяцы, ... Это только дизайнерский подход.

При использовании DATETIME для полей начала и конца учтите, что у вас могут возникнуть проблемы при "расчете времени выполнения процесса", поскольку вам также следует подумать о часовых поясах, переходе на летнее время и т. Д.

0 голосов
/ 30 октября 2011

Я бы сказал, что у вас есть два соответствующих формата:

  • «время начала - длительность» (datetime, int) или (метка времени, int)
  • «время начала - endвремя "(datetime, datetime) или (timestamp, timestamp)

Одна из больших проблем, связанных с датой и временем, заключается в том, что переходы на летнее время выполняются два раза в год, что на час отбрасывает ваши вычисления.Путешествие между часовыми поясами одинаково сбивает с толку.Если вы используете обозначение времени / времени, ваша продолжительность может отличаться.Если вы используете обозначение времени / продолжительности, ваше время окончания может отличаться.Какое бы из этих двух представлений ни было наиболее подходящим, поэтому оно зависит от вашего использования (возможно, вам придется использовать гибридный подход).

Для времени показа фильма я бы назвал сохранение времени начала и продолжительности в минутахэто более подходящий формат.Время показа фильма является заданным, время окончания наступает после факта.

0 голосов
/ 30 октября 2011

Я бы использовал 'timestamp' для обоих столбцов.

Datetime использует 4 байта, тогда как Timestamp использует 8 байтов, поэтому более эффективно.

Сравнение временных меток значительно быстрее, чем даты.

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

0 голосов
/ 30 октября 2011

Использовать DATETIME или INT

Я предпочитаю хранить дату и время в unix timestamp (INT), потому что я могу использовать его в функциях PHP, таких как date

echo "Movie will start at ".date("H:i", $row['start_time']);

И с ним легко манипулировать:

echo "Movie will start in ".(time() - $row['start_time'])." seconds";

Текущая дата и время: http://www.unixtimestamp.com/

Если вы хотите скопировать фильмы на следующий день:

 $sql = "SELECT * FROM movies WHERE start_time >= ".strtotime("today 00:00")." AND start_time <= ".strtotime("today 23:59");

 // query..
 foreach($results as $row) {
    $new_start = strtotime("+1 day", $row['start_time'];    
    // insert
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...