php преобразование даты для mysql

PHP date() format when inserting into datetime in MySQL

What is the correct format to pass to the date() function in PHP if I want to insert the result into a MySQL datetime type column?

I’ve been trying date(‘Y-M-D G:i:s’) but that just inserts «0000-00-00 00:00:00» everytime.

13 Answers 13

Try: date(‘Y-m-d H:i:s’) which uses the numeric equivalents.

From the comments of php’s date() manual page:

Here’s an alternative solution: if you have the date in PHP as a timestamp, bypass handling it with PHP and let the DB take care of transforming it by using the FROM_UNIXTIME function.

php преобразование даты для mysql. Смотреть фото php преобразование даты для mysql. Смотреть картинку php преобразование даты для mysql. Картинка про php преобразование даты для mysql. Фото php преобразование даты для mysql

I use the following PHP code to create a variable that I insert into a MySQL DATETIME column.

This will hold the server’s current Date and Time.

php преобразование даты для mysql. Смотреть фото php преобразование даты для mysql. Смотреть картинку php преобразование даты для mysql. Картинка про php преобразование даты для mysql. Фото php преобразование даты для mysql

I use this function (PHP 7)

Older versions of PHP (PHP

php преобразование даты для mysql. Смотреть фото php преобразование даты для mysql. Смотреть картинку php преобразование даты для mysql. Картинка про php преобразование даты для mysql. Фото php преобразование даты для mysql

Format time stamp to MySQL DATETIME column :

php преобразование даты для mysql. Смотреть фото php преобразование даты для mysql. Смотреть картинку php преобразование даты для mysql. Картинка про php преобразование даты для mysql. Фото php преобразование даты для mysql

Format MySQL datetime with PHP

php преобразование даты для mysql. Смотреть фото php преобразование даты для mysql. Смотреть картинку php преобразование даты для mysql. Картинка про php преобразование даты для mysql. Фото php преобразование даты для mysql

php преобразование даты для mysql. Смотреть фото php преобразование даты для mysql. Смотреть картинку php преобразование даты для mysql. Картинка про php преобразование даты для mysql. Фото php преобразование даты для mysql

There is no need no use the date() method from PHP if you don’t use a timestamp. If dateposted is a datetime column, you can insert the current date like this:

php преобразование даты для mysql. Смотреть фото php преобразование даты для mysql. Смотреть картинку php преобразование даты для mysql. Картинка про php преобразование даты для mysql. Фото php преобразование даты для mysql

This has been driving me mad looking for a simple answer. Finally I made this function that seems to catch all input and give a good SQL string that is correct or at least valid and checkable. If it’s 1999-12-31 it’s probably wrong but won’t throw a bad error in MySQL.

Note: I understood the question referring to current time.

Источник

Преобразование даты в mysql с помощью DATE_FORMAT()

Как известно, все даты хранятся в mysql в обратном порядке год-месяц-число(2008-10-18), иногда даже без разделителя(20081018).
Чтобы вывести дату, нужно ее преобразовать в нормальный читаемый вид.

Тут есть два способа преобразования, эффективный и не очень.
Не эффктивный способ это когда дату выводимую из mysql преобразуют с помощью php.
Сам лично так делал очень долгое время. Перед выводом на экран переворачивал каждую дату с помощью php функции.
Если количество преобразований не большое, то можно переворачивать дату и с помощью php, ничего плохого тут нет, но если нужно будет выдернуть десятки-сотни тысяч записей и в каждой преобразовать дату, то тут конечно намного быстрее будет преобразование дат с помощью mysql.

В mysql существует отличная функция DATE_FORMAT(), она очень похожа на php функцию date().
Вот пример использования

SELECT DATE_FORMAT(«2008-11-19»,’%d.%m.%Y’);
результат

Все очень просто и быстро, нет необходимости крутить даты с помощью php.
Вот список определителей этой функции

ОпределительОписание
%MНазвание месяца (январь. декабрь)
%WНазвание дня недели (воскресенье. суббота)
%DДень месяца с английским суффиксом (0st, 1st, 2nd, 3rd и т.д.)
%YГод, число, 4 разряда
%yГод, число, 2 разряда
%XГод для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с ‘%V’
%xГод для недели, где воскресенье считается первым днем недели, число, 4 разряда, используется с ‘%v’
%aСокращенное наименование дня недели (Вс. Сб)
%dДень месяца, число (00..31)
%eДень месяца, число (0..31)
%mМесяц, число (00..12)
%cМесяц, число (0..12)
%bСокращенное наименование месяца (Янв. Дек)
%jДень года (001..366)
%HЧас (00..23)
%kЧас (0..23)
%hЧас (01..12)
%IЧас (01..12)
%lЧас (1..12)
%iМинуты, число (00..59)
%rВремя, 12-часовой формат (hh:mm:ss [AP]M)
%TВремя, 24-часовой формат (hh:mm:ss)
%SСекунды (00..59)
%sСекунды (00..59)
%pAM или PM
%wДень недели (0=воскресенье..6=суббота)
%UНеделя (00..53), где воскресенье считается первым днем недели
%uНеделя (00..53), где понедельник считается первым днем недели
%VНеделя (01..53), где воскресенье считается первым днем недели. Используется с `%X’
%vНеделя (01..53), где понедельник считается первым днем недели. Используется с `%x’
%%Литерал `%’.

Комментарии

28.11.2008 Жека
Аналогично! Всегда пользовался своей функцией на php

03.12.2008 Сергей
Ну а вообще, кто то хоть пользуется таким подходом?
Или все используют php для переворота даты?
Я лично никогда не переворачивал дату в mysql, до сих пор все в php делаю

28.06.2009 Илья
К сожалению, ничего не получилось 🙁

08.07.2009 Виталий
Круто, спасибо за функцию. Интересно, а ёщё какие нибуть загогулины есть?

14.07.2009 DSaint
Спасибо, очень помогло. Осталось только название месяца на русском отобразить)

28.07.2009 Влад
mysql=>PHP
select unix_timestamp(start_date) as start_date_php
php-code
date(‘d.m.Y’,$row[‘start_date_php’])

PHP=>MySQL
update table set start_date=DATE_FORMAT(STR_TO_DATE(‘19.12.2009 18:35:22′,’%d.%m.%Y %H:%i’),’%Y.%m.%d %H:%i’)

18.08.2009 Гость
2: DSaint
Есть такая чудная функция:
ELT( MONTH(‘2004-04-10’), ‘Янв.’,’Фев.’,’Март’,’Апр.’,’Май’,’Июнь’,’Июль’,’Авг.’,’Сен.’,’Окт.’,’Ноя.’,’Дек.’)

29.10.2009 Владимир
Спасибо, про ELT( MONTH(‘2004-04-10’), ‘Янв.’,’Фев.’,’Март’,’Апр.’,’Май’,’Июнь’,’Июль’,’Авг.’,’Сен.’,’Окт.’,’Ноя.’,’Дек.’)
я не слыхал.

07.10.2010 Евгений
А что быстрее работает? Преобразование в запросе, или в результате работы php-функции?

07.10.2010 defender
Как минимум меньше памяти на обработку меньше вызовов функций меньше выделений памяти. Постоянно подобным пользуюсь только не в mysql а в postgresql.

08.10.2010 Админ
Евгений, вот defender правильно сказал, через базу это преобразование должно сработать красивее, но конечно если речь идет об извлечении огромного количества данных.
Если вы дергаете 10-20 записей, то нет никакой разницы как преобразовать дату, по сравнению с остальными нагрузками это мелочь.

27.01.2011 pcemma
ухх спасибо аффтору (: отпала нужда юзать свою мега крутую функцию для преобразования (:

13.04.2011 Xes
кАК ЕЕ ПОЛЬЗОВАТЬ В ПХП
while ($sqlr=mysql_fetch_array($sql))
<
echo ($sqlr[‘comadd’].’ ‘.$sqlr[‘comment’].’

14.04.2011 Виталий
У меня в базе дата записана в формате 19.11.2008 тип таблицы VARCHAR, как ее перезаписать в базу в формате 2008-11-19?
Руками просто очень долго.
Спасибо.

15.04.2011 админ
Xes, это функция MySQL, использовать ее нужно в запросе sql, который судя по вашему коду находится где-то выше. В данном участке кода ее нельзя использовать.

15.04.2011 админ
Виталий, просто измените тип ячейки на DATE, mysql автоматически переведет все данные в этой ячейке именно в формат 2008-11-19.
Но на всякий случай перед изменением типа ячейки сделайте дамп этой таблицы, так как вдруг база что то не то сделает и таблица сломается вообще.

Если вам важно оставить тип поля varchar, то после того, как вы установите тип DATE, установите обратно varchar.

Это самый простой вариант, но не совсем правильный, но я проверил, он работает.

24.05.2011 Константин
а я всегда беру SELECT *,UNIX_TIMESTAMP(created) AS created FROM.
а мотом могу хоть в каком формате. Хоть только день, хоть только время.
и сравнивать, что больше 14.05.2011 или 14.05.2010.
А записываю так:
. date=’.gmdate(«Y-m-d H:i:s»,$created).
и вобщем-то, не вижу причин менять привычки

24.05.2011 сергей
Константин, да я и сам использую для вывода php date(), просто тут рассмотрен вариант преобразования даты не через php, а через mysql.

Я бы сказал, что это просто обзор 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 мы можем отфильтровать извлеченные данные в зависимости от даты и времени. Например, мы можем извлечь только те заказы, доставка которых запланирована на ноябрь:

Заключение

Источник

преобразовать дату php в формат mysql

У меня есть поле даты в php, которое использует этот код:

Как преобразовать это в формат MySql 0000-00-00 для включения в db. Является ли это по строкам: date (‘Ymd’ strtotime ($ date). Причина, о которой я прошу, заключается в том, что я пробовал варианты этого, и я не могу заставить его работать. Либо отображается как 1970, либо какой-то другой вариант из этого. Большое спасибо

1. Если в столбце MySQL DATE тип DATE :

2. Если ваш столбец MySQL имеет тип DATETIME :

На этом сайте есть два довольно простых решения – просто проверьте код, я предоставил описания на случай, если вы захотите, – сэкономит вам несколько кликов.

1. Одно общее решение – хранить даты в полях DATETIME и использовать функции PHP (Date) и strtotime () для преобразования между метками времени PHP и MySQL DATETIME. Методы будут использоваться следующим образом:

Второй второй вариант – позволить MySQL выполнять работу. У MySQL есть функции, которые мы можем использовать для преобразования данных в тот момент, когда мы обращаемся к базе данных. UNIX_TIMESTAMP будет конвертировать из DATETIME в временную метку PHP, а FROM_UNIXTIME будет конвертировать из временной метки PHP в DATETIME. Методы используются в SQL-запросе. Поэтому мы вставляем и обновляем даты с помощью таких запросов,

Используйте их в своем SQL, например:

Если consum_date – это общий формат даты, вы можете использовать date() и strtotime()

Если у вас есть дата в формате dd / mm / yyyy, используйте следующую команду:

Если у вас это в мм / дд / гггг, просто измените вторую строку:

Существует несколько вариантов.

Либо преобразуйте его в timestamp и используйте, как указано в других сообщениях с помощью strtotime() или используйте параметр синтаксиса даты MySQL

хотя если у вас есть действительная дата даты (‘ym-d’, strtotime ($ date)); должен также работать

PHP 5.3 имеет функции для создания и переформатирования объекта DateTime из любого формата, который вы указываете:

MySQL также может управлять форматированием с помощью функции STR_TO_DATE() при вставке / обновлении и DATE_FORMAT() при запросе.

Источник

Работа с датой и временем в 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, «Функции приведения типов».

Источник

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

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