php текущая дата и время для записи в mysql

Изучаем MySQL: работа с датами и временем

В этой статье мы рассмотрим основы работы с датой и временем в MySQL.

Формат даты и времени

MySQL date format поддерживает несколько форматов даты и времени. Их можно определить следующим образом:

DATE — хранит значение даты в виде ГГГГ-ММ-ДД. Например, 2008-10-23.
DATETIME — хранит значение даты и времени в виде ГГГГ-MM-ДД ЧЧ:ММ:СС. Например, 2008-10-23 10:37:22. Поддерживаемый диапазон дат и времени: 1000-01-01 00:00:00 до 9999-12-31 23:59:59
TIMESTAMP — похож на DATETIME с некоторыми различиями в зависимости от версии MySQL и режима, в котором работает сервер.

Создание полей даты и времени

Форматы даты и времени

Наиболее часто используемым разделителем для дат является тире ( — ), а для времени — двоеточие ( : ). Но мы можем использовать любой символ, или вообще не добавлять никакого символа.

Например, все следующие форматы являются правильными:

Функции даты и времени

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

ФункцияОписание
ADDDATE()Добавляет дату.
ADDTIME()Добавляет время.
CONVERT_TZ()Конвертирует из одного часового пояса в другой.
CURDATE()Возвращает текущую дату.
CURTIME()Возвращает текущее системное время.
DATE_ADD()Добавляет одну дату к другой.
MySQL DATE FORMAT ()Задает указанный формат даты.
DATE()Извлекает часть даты из даты или выражения дата-время.
DATEDIFF()Вычитает одну дату из другой.
DAYNAME()Возвращает день недели.
DAYOFMONTH()Возвращает день месяца (1-31).
DAYOFWEEK()Возвращает индекс дня недели из аргумента.
DAYOFYEAR()Возвращает день года (1-366).
EXTRACTИзвлекает часть даты.
FROM_DAYS()Преобразует номер дня в дату.
FROM_UNIXTIME()Задает формат даты в формате UNIX.
MySQL DATE_SUB ()Вычитает одну дату из другой.
HOUR()Извлекает час.
LAST_DAYВозвращает последний день месяца для аргумента.
MAKEDATE()Создает дату из года и дня года.
MAKETIME ()Возвращает значение времени.
MICROSECOND()Возвращает миллисекунды из аргумента.
MINUTE()Возвращает минуты из аргумента.
MONTH()Возвращает месяц из переданной даты.
MONTHNAME()Возвращает название месяца.
NOW()Возвращает текущую дату и время.
PERIOD_ADD()Добавляет интервал к месяцу-году.
PERIOD_DIFF()Возвращает количество месяцев между двумя периодами.
QUARTER()Возвращает четверть часа из переданной даты в качестве аргумента.
SEC_TO_TIME()Конвертирует секунды в формат ‘ЧЧ:MM:СС’.
SECOND()Возвращает секунду (0-59).
MySQL STR TO DATE ()Преобразует строку в дату.
SUBTIME()Вычитает время.
SYSDATE()Возвращает время, в которое была выполнена функция.
TIME_FORMAT()Задает формат времени.
TIME_TO_SEC()Возвращает аргумент, преобразованный в секунды.
TIME()Выбирает часть времени из выражения, передаваемого в качестве аргумента.
TIMEDIFF()Вычитает время.
TIMESTAMP()С одним аргументом эта функция возвращает дату или выражение дата-время. С двумя аргументами возвращается сумма аргументов.
TIMESTAMPADD()Добавляет интервал к дате-времени.
TIMESTAMPDIFF()Вычитает интервал из даты — времени.
TO_DAYS()Возвращает аргумент даты, преобразованный в дни.
UNIX_TIMESTAMP()Извлекает дату-время в формате UNIX в формат, принимаемый MySQL.
UTC_DATE()Возвращает текущую дату по универсальному времени (UTC).
UTC_TIME()Возвращает текущее время по универсальному времени (UTC).
UTC_TIMESTAMP()Возвращает текущую дату-время по универсальному времени (UTC).
WEEK()Возвращает номер недели.
WEEKDAY()Возвращает индекс дня недели.
WEEKOFYEAR()Возвращает календарную неделю даты (1-53).
YEAR()Возвращает год.
YEARWEEK()Возвращает год и неделю.

Вы можете попробовать сочетание нескольких функций в одном запросе (например, чтобы найти день недели):

Внесение значений даты и времени в столбцы таблицы

Данный запрос создает заказ для указанного элемента с датой, временем выполнения заказа, и интервалом через две недели после этого в качестве даты доставки:

Точно так же можно заказать товар с датой доставки через два месяца:

Извлечение данных по дате и времени

В MySQL мы можем отфильтровать извлеченные данные в зависимости от даты и времени. Например, мы можем извлечь только те заказы, доставка которых запланирована на ноябрь:

Заключение

Источник

Как вставить текущую дату в базу данных MySQL

Решение

Вы не должны передавать date или datetime из PHP, если вы хотите использовать date / datetime во время выполнения вашего запроса, вместо этого вы можете использовать встроенные функции MySQL для этого

Вставить текущую дату & использование времени NOW()

Для вставки только текущей даты используйте CURRENT_DATE()

Эти запросы предполагают, что у вас есть столбец с именем dt в вашем delivery Таблица. Пожалуйста, измените имя столбца, если отличается в вашей схеме, или добавьте date или же datetime столбец в вашей таблице, если у вас еще нет

Другие решения

Вам не нужно делать захват даты в PHP, если вы хотите, чтобы дата была датой на момент выполнения запроса. Вы можете использовать MySQL NOW() функция, просто добавьте его во внутренний запрос в правильном столбце, чтобы соответствовать столбцам внешних запросов.

Если вы хотите вставить свою собственную дату, используйте в соответствии с ниже-

Если вы хотите указать текущую дату, используйте

Примечание: если вы хотите вставить со временем, используйте now ().

Я не могу понять тебя ясно. Обычно мы вставляем текущую дату как

Используйте now () в своем запросе, чтобы получить текущую дату.

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

Вы можете использовать функцию timestamp / datetime / now () для сохранения текущей даты (выберите ее в соответствии с вашими требованиями)

Источник

Вставить текущую дату в формате даты и времени mySQL

У меня возникают проблемы с правильной установкой даты в моей базе данных.

Я использую этот формат, и, однако, он отгоняет правильно, когда, я вставляю

он не работает успешно, и время остается 00:00:00. Если бы вы могли найти решение, которое было бы здорово, спасибо.

Если вы хотите сохранить текущее время, просто используйте функции MYSQL.

Если вам нужно использовать PHP для этого, формат Ymd H:i:s попробуйте

Попробуйте это вместо этого

NOW() используется для вставки текущей даты и времени в таблицу MySQL. Все поля с типами данных DATETIME, DATE, TIME & TIMESTAMP работают с этой функцией.

Следующий код показывает использование NOW()

вы можете использовать CURRENT_TIMESTAMP, функцию mysql

« datetime » ожидает, что дата будет сформирована следующим образом: ГГГГ-ММ-ДД ЧЧ: ММ: СС

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

установите type столбца с именем dateposted как DATETIME и выполните следующий запрос:

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

Надежда, будет работать отлично.

Если вы передаете дату с PHP, вы можете использовать любой формат, используя STR_TO_DATE() mysql. Пусть conseder вы вставляете дату через html-форму

dateposted должен быть типом date mysql. или mysql добавит 00:00:00
в некоторых случаях лучше вставить дату и время вместе в БД, чтобы вы могли выполнять вычисления с часами и секундами. ().

Лучший способ сделать это проще и эффективнее:

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

Источник

Работа с датой и временем в MySQL+PHP

Ниже представлен пример, в котором используются функции даты. Приведенный запрос выбирает все записи с величиной date_col в течение последних 30 дней:

Примечание: в версии 4.0 функция WEEK(#,0) была изменена с целью соответствия календарю США.
Заметьте, если неделя является последней неделей прошлого года, MySQL вернет 0 если вы не указали 2 или 3 как опциональный аргумент:

Можно считать, что MySQL должен вернуть 52, так как данная дата и является 52-ой неделей года 1999. Мы решили возвращать 0, так как мы хотим, чтобы функция давала «номер недели в указанном году». Это делает функцию WEEK() более надежной при использовании совместно с другими функциями, которые вычисляют части дат.

Если вам все же важно уточнить корректную неделю в году, тогда вы можете использовать 2 или 3 как опциональный аргумент или использовать YEARWEEK()

Обратите внимание, что номер недели отличается от того, который возвращает функция WEEK() (0), будучи вызванной с опциональным аргументом 0 или 1. Это потому, что WEEK() возвращает номер недели именно в указанном году.

HOUR(time)- Возвращает час для аргумента time в диапазоне от 0 до 23:

В MySQL формат выражения expr допускает любые разделительные знаки. Разделители, представленные в данной таблице, приведены в качестве примеров. Если аргумент date является величиной типа DATE и предполагаемые вычисления включают в себя только части YEAR, MONTH, и DAY (т.е. не содержат временной части TIME), то результат представляется величиной типа DATE. В других случаях результат представляет собой величину DATETIME:

При использовании некорректных значений дат результат будет равен NULL. Если при суммировании MONTH, YEAR_MONTH или YEAR номер дня в результирующей дате превышает максимальное количество дней в новом месяце, то номер дня результирующей даты принимается равным последнему дню нового месяца:

Из предыдущего примера видно, что слово INTERVAL и ключевое слово type не являются регистро-зависимыми.

Функция TO_DAYS() не предназначена для использования с величинами, предшествующими введению григорианского календаря (1582), поскольку не учитывает дни, утерянные при изменении календаря.

Функция FROM_DAYS() не предназначена для использования с величинами, предшествующими введению григорианского календаря (1582), поскольку она не учитывает дни, утерянные при изменении календаря.

Все другие символы просто копируются в результирующее выражение без интерпретации:

В MySQL 3.23 символ ‘%’ должен предшествовать символам определителя формата. В более ранних версиях MySQL символ ‘%’ необязателен.

Причина того, что промежутки для месяца и дня начинаются с нуля заключается в том, что MySQL позволяет использовать неполные даты, такие как ‘2004-00-00’, начиная с MySQL 3.23.

При использовании функции UNIX_TIMESTAMP в столбце TIMESTAMP эта функция будет возвращать величину внутренней временной метки непосредственно, без подразумеваемого преобразования строки во временную метку («string-to-unix-timestamp» ). Если заданная дата выходит за пределы допустимого диапазона, то функция UNIX_TIMESTAMP() возвратит 0, но следует учитывать, что выполняется только базовая проверка (год 1970-2037, месяц 01-12, день 01-31). Если необходимо выполнить вычитание столбцов UNIX_TIMESTAMP(), результат можно преобразовать к целым числам со знаком. See Раздел 6.3.5, «Функции приведения типов».

Источник

Календарные типы данных в MySQL: особенности использования

В MySQL 5 есть несколько типов данных для хранения даты и времени. Это TIMESTAMP, DATE, DATETIME, TIME и YEAR. Все они обладают своими особенностями, и выбор в пользу того или иного календарного типа должен производиться отдельно в каждой конкретной ситуации. Я хотел бы поделиться с вами результатом моего сегодняшнего миниисследования этих типов, в том числе в аспекте работы с временными зонами.

Итак, все календарные типы данных подробно описаны в разделе «10.3. Date and Time Types» руководства по MySQL. А важная информация, касающаяся поддержки СУБД временных зон, расписана в разделе «9.7. MySQL Server Time Zone Support». Все следующее далее базируется на изучении руководства. В то же время, в здесь указаны лишь нюансы выбора в пользу того или иного типа, поэтому этот материал никак не заменяет мануал, но дополняет его.

Проанализировав описание типов, представленное выше, можно сделать практически все выводы о достоинствах и недостатках тех или иных типов. Все довольно просто и очевидно.

Но прежде, чем рассказать об использовании этих типов, хочу заметить, что на практике часто используется другой тип для хранения даты и времени: целочисленное значение (для хранения даты — INT (4 байта), даты и времени — BIGINT (8 байт)). Отличие использования целочисленных типов от DATE и DATETIME лишь в том, что при выводе данные не форматируются, а в вычислениях с датами и временем целые числа требуется преобразовывать в соответствующий календарный тип. Кроме того, не производится проверка на валидность представленного значения перед сохранением. Возможности сортировки сохраняются. Поэтому INT и BIGINT имеет смысл использовать в тех же случаях, как DATE и DATETIME, с целью максимизации переносимости и независимости от СУБД. Других преимуществ я не вижу, если они есть, предлагаю указать в комментах.

Использование календарных типов данный в MySQL

Начнем с самого простого — тип YEAR. Единственное его достоинство — малый размер — всего-то 1 байт. Но из-за этого действует строгое ограничение по диапазону допустимых значений (тип может хранить только 255 разных значений). Мне сложно представить практическую ситуацию, когда может потребоваться хранить года строго в диапазоне от 1901 до 2155. Кроме того, тип SMALLINT (2 байта) дает диапазон, достаточный в большинстве ситуаций для хранения года. А экономить 1 байт на строке в таблице БД в наше время смысла нет.

Типы DATE и DATETIME можно объединить в одну группу. Они хранят дату или дату и время с довольно широким диапазоном допустимых значений, независимую от установленной на сервере временной зоны. Их использование определенно имеет практический смысл. Но если требуется хранить даты исторических событий, уходящие в прошлое за Нашу эру, придется выбрать другие типы данных. Для хранения дат неких событий, потенциально выходящих за рамки диапазона типа TIMESTAMP (дни рождений, даты выпуска продуктов, избрания президентов, запуски космических ракет и т.д.), отлично подойдут эти типы. При использовании этих типов нужно учитывать один важный нюанс, но об этом ниже.

Тип TIME можно использовать для хранения промежутка времени, когда не нужна точность меньше 1 секунды, и промежутки времени меньше 829 часов. Добавить тут больше нечего.

Остался самый интересный тип — TIMESTAMP. Рассматривать его надо в сравнении с DATE и DATETIME: TIMESTAMP тоже предназначен для хранения даты и/или времени происхождения неких событий. Важное отличие между ними в диапазонах значений: очевидно, что TIMESTAMP не годится для хранения исторических событий (даже таких, как дни рождений), но отлично подходит для хранения текущих (логирование, даты размещения статей, добавления товаров, оформления заказов) и предстоящих в обозримом будущем событий (выходы новых версий, календари и планировщики и т.д).

Основное удобство использования типа TIMESTAMP состоит в том, что для столбцов этого типа в таблицах можно задавать значение по умолчанию в виде подстановки текущего времени, а так же установки текущего времени при обновлении записи. Если вам требуется эти возможности, то с вероятностью 99% TIMESTAMP — именно то, что вам нужно. (Как этоделать, смотрите в мануале.)

Не стоит бояться того, что с приближением к 2038 году ваш софт перестанет работать. Во-первых, до этого времени вашим софтом, скорее всего, просто перестанут пользоваться (особенно версиями, которые пишутся сейчас). Во-вторых, с приближением к этой дате разработчики MySQL обязательно что-нибудь придумают для сохранения работоспособности вашего софта. Все решится так же хорошо, как проблема Y2K.

Итак, тип TIMESTAMP используем для хранения дат и времени свершения событий нашего времени, а DATETIME и DATE — для хранения дат и времени свершения исторических событий, или событий глубокого будущего.

Диапазоны значений — это важное отличие между типами TIMESTAMP, DATETIME и DATE, но не главное. Главное то, что TIMESTAMP хранит значение в UTC. При сохранении значения оно переводится из текущего временной зоны в UTC, а при его чтении — во время текущей временной зоны из UTC. DATETIME и DATE хранят и выводят всегда одно и то же время, независимо от временных зон.

Временные зоны устанавливаются в СУБД MySQL глобально или для текущего подключения.Последнее можно использовать для обеспечения работы разных пользователей в разных временных зонах на уровне СУБД. Все значения времени физически будут храниться в UTC, а приниматься от клиента и отдаваться клинту — в значениях его временной зоны. Но только при использовании типа данных TIMESTAMP. DATE и DATETIME всегда принимают, хранят и отдают одно и то же значение.

Функция NOW() и ее синонимы возвращают значение времени в текущей временной зоне пользователя.

Учитывая все эти обстоятельства, необходимо быть крайне внимательными при изменении временной зоны в пределах подключения к серверу и использовании типов DATE и DATETIME. Если надо хранить дату (например, дату рождения), то никаких проблем не будет. Дата рождения в любой зоне одинаковая. Т.е. если вы родились 1 января в 0:00 UTC/GMT+0, то это не значит, что в Америке будут праздновать ваш день рождения 31 декабря. Но если вы решите хранить время события в столбце DATETIME, то тут уже построить работу с пользовательскими временными зонами на уровне СУБД просто не выйдет. Поясню на примере:

Пользователь X работает в зоне UTC/GMT+2, Y — в зоне UTC/GMT+3. Для соединений пользователей с MySQL установлена соответствующая (у каждого своя) временная зона. Пользователь размещает сообщение на форуме, нас интересует дата написания сообщения.

Вариант 1: DATETIME. Пользователь X пишет сообщение в 14:00 UTC/GMT+2. Значение в поле «дата» сообщения подставляется как результат выполнения функции NOW() — 14:00. Пользователь Y считывает время написания сообщения и видит те же 14:00. Но у него в настройках стоитзона UTC/GMT+3, и он думает, что сообщение было написано не только что, а час назад.

Вариант 2: TIMESTAMP. Пользователь X пишет сообщение в 14:00 UTC/GMT+2. В поле «дата» попадает результат выполнения функции NOW() — в данном случае — 12:00 UTC/GMT+0. ПользовательY считывает время написания сообщения и получает (UTC/GMT+3)(12:00 UTC/GMT+0) = 15:00 UTC/GMT+3. Все получается ровно так, как мы хотим. И главное — пользоваться этим крайне удобно: для поддержки пользовательских временных зон не нужно писать никакой код приведения времени.

Возможности подстановки текущего времени и работы с временными зонами в типе TIMESTAMP настолько весомы, что если вам в неком логе надо хранить дату без времени, все равно стоит использовать TIMESTAMP, вместо DATE, не экономя 1 байт разницы между ними. При этом на «00:00:00» просто не обращать внимания.

Если же вы не можете использовать TIMESTAMP из-за относительно малого диапазона его значений (а обычно это 1—2 случая против 10—15 в базе сайта), придется использовать DATETIME и аккуратно его корректировать значения в нужных местах (т.е. при записи в это поле переводить дату в UTC, а при чтении — во время в зоне считывающего пользователя). Если вы храните только дату, то скорее всего не важно, какая у вас временная зона: новый год все празднуют 1 января по локальному времени, ничего переводить тут не понадобится.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *