Временные метки MySQL :
Хранятся в UTC
Они преобразуются в UTC при хранении и возвращаются в ваш часовой пояс при извлечении. Если вы измените настройки часового пояса , полученные значения также изменятся.
Может быть автоматически инициализирован и обновлен
Вы можете установить их значение по умолчанию и / или значение автоматического обновления на CURRENT_TIMESTAMP
Иметь диапазон 1970-01-01 00:00:01 UTC
до2038-01-19 03:14:07 UTC
Принимая во внимание, что дата и время MySQL :
То, что вы храните, это то, что вы получаете ™.
Иметь диапазон 1000-01-01 00:00:00
до9999-12-31 23:59:59
Значения вне диапазона могут работать, но гарантированно будут работать только значения в пределах диапазона .
Вы можете хранить даты, когда день или месяц равен нулю.
Это MySQL способ хранения дней рождения! Вы не можете сделать это с a TIMESTAMP
, с единственным исключением, являющимся нулевым значением 0000-00-00
.
Вы можете хранить недействительные даты, если они вам нужны, в режиме ALLOW_INVALID_DATES .
В NOW()
некоторых случаях вы можете установить значение по умолчанию , но предпочтительным и более естественным способом автоматически инициализируемых и обновляемых дат является TIMESTAMP
.
И, конечно, есть DATE
и такие TIME
, которые работают точно так же, как DATETIME
, но, конечно DATE
, не заботятся о времени и TIME
не заботятся о дате. Все четыре типа данных отлично работают с широким набором функций даты и времени , но когда вы смешиваете типы данных, вы должны знать о эффектах преобразования .
Теперь к вашему вопросу: вы должны использовать DATETIME
везде. Не по техническим причинам, но, поскольку вы все еще не знаете, как работает MySQL, DATETIME
это более простой выбор. Это будет означать, что вам нужно вычислить текущую временную метку в PHP перед сохранением, это так же просто, как:
$mysqldate = date("Y-m-d H:i:s");
Функция даты в PHP работает так:
string date ( string $format [, int $timestamp = time() ] )
"Y-m-d H:i:s"
Формат является совместимым с MySQL и оставив второй параметр пустым, date()
требует , time()
чтобы получить текущий UNIX метку времени .
Использование TIMESTAMP
вместо a DATETIME
имеет добавленную ценность MySQL, принимая на себя ответственность за выбор текущей метки времени, и вы можете пропустить поле при вставке / обновлении. Но так как вы уже отправляете запрос, а код для получения текущей временной метки в PHP минимален, вы можете смело идти DATETIME
на все.
Что касается фактического кода для хранения метки времени PHP в базе данных, вы должны посмотреть на объекты данных PHP , и если вам все еще неясно, спросите вместо этого StackOverflow . Но уже есть почти 1,5 тыс. Связанных вопросов , обязательно просмотрите их, прежде чем задавать вопросы. Просто подсказка, готовые заявления - вот как это делают крутые дети.