- Преобразование дат в PHP для DATETIME в SQL
- От PHP к MySQL сквозь время
- Перевод времени из PHP в MySQL
- Перевести время из MySQL в PHP…
- Creating a PHP date in the format for a SQL Timestamp insert
- Note: You might not need to create a PHP date
- Creating a PHP timestamp variable
- A Drupal 7 SQL INSERT with Timestamp example
- Getting a timestamp for some other date and time
- PHP SQL Timestamp inserts
- MySQL STR_TO_DATE () функция
Преобразование дат в PHP для DATETIME в SQL
У меня есть форум на PHP, который принимает дату, как в форме dd/mm/yyyy hh:mm:ss . Однако мне нужно вставить его для SQL как DATETIME в формате как yyyy-mm-dd hh:mm:ss . Как я могу преобразовать эти данные?
Формат даты недействителен: dd/mm/yyyy hh:mm:ss . Вероятно, вы имеете в виду d/m/YH:i:s
Если у вас версия 5.3+, есть безопасный способ конвертировать дату в другой формат. Вот пример:
$timestamp = '31/05/2001 12:22:56'; $timestamp = DateTime::createFromFormat('d/m/YH:i:s', $timestamp); echo $timestamp->format('Ymd H:i:s');
или если вам нравится более процедурный способ:
$timestamp = '31/05/2001 12:22:56'; $timestamp = date_create_from_format('d/m/YH:i:s', $timestamp); echo date_format($timestamp, 'Ymd H:i:s');
Будьте осторожны с предыдущими предложениями. Некоторые из них совершенно ошибочны, а другие могут привести к ошибкам.
Вы можете использовать strtotime и дату, чтобы переработать формат.
$new_date = date( "Ymd H:i:s", strtotime( $old_date ) );
Это означает, что ваша старая дата ( dd/mm/yyyy hh:mm:ss ) преобразует ее в временную метку unix, которая затем может использоваться с функцией даты php для форматирования даты до нужного формата.
Два из нескольких возможных способов:
- Преобразуйте в код, а затем передайте преобразованное значение в mysql: $mysqldate = date( ‘Ymd H:i:s’, $phpdate );
- Пусть mysql выполняет работу с помощью встроенных функций: $query = «UPDATE table SET datetimefield = FROM_UNIXTIME($phpdate) . «;
если у вас есть datetime avaialable from from from above above format, тогда вам просто нужно использовать следующую функцию.
function localToMysql($dateTime) < $date_chunks = explode('/', $dateTime); $time_chunks = explode(' ', $date_chunks[2]); $final_format = $time_chunks[0] . "-" . $date_chunks[1] . "-" . $date_chunks[0] . " " . $time_chunks[1];
От PHP к MySQL сквозь время
Порой нам необходимо переводить время из одного формата в другой. Например, нужно время из PHP-скрипта сохранить в базе данных MySQL. Всё бы ничего… но они по-разному работают со временем. И новички порой строят огромные костыли, чтобы, как им кажется, упростить свою жизнь.
Для этой статьи я возьму в пример метки времени PHP и формат времени MySQL.
PHP работает с метками времени UNIX. То есть время представляется в виде количества секунд, прошедших с начала дня 1 января 1970 года. И на момент написания статьи — 23:25 17 июня 2015 года — PHP показал вот такое время — 1434573224. А вот в MySQL время хранится в другом формате (типе данных). Я предпочитаю тип DATETIME. Упомянутая выше дата выглядела бы в таблице MySQL в поле с типом DATETIME так: 2015-06-17 23:25:00.
Перевод времени из PHP в MySQL
Ну так как же нам перевести время из PHP-скрипта в MySQL? Очень просто. Для начала, давайте решим, откуда в вашем скрипте берется какая-либо метка времени? Допустим, время регистрации пользователя является временем работы скрипта. В этом случае нам достаточно использовать встроенную в PHP функцию time(). Она и вернет текущую метку времени UNIX. А если вам нужно сохранить в базе данных дату, которую пользователь ввел в HTML-форму? Тут задача немного сложнее. Но она сама по себе несложная.
)\.(\d)\.(\d)$/'; $result = preg_match( $pattern, $sUserDate, $matches ); if ( $result && !empty( $matches ) ) < $day = $matches[1]; $month = $matches[2]; $year = $matches[3]; >$time = mktime( 0, 0, 0, $month, $day, $year ); // Получим метку времени 1435006800 ?>
И как теперь сохранить это в базу? Да еще и в формате типа данных MySQL DATETIME… Легко!
Нувотивсёбырь Задача решена! Проверьте 🙂
Перевести время из MySQL в PHP…
…могло бы оказаться сложнее, но нет. Это так же просто. Нет, пожалуй, это еще проще.
Скажу вам больше. Если функции UNIX_TIMESTAMP() не передавать вообще никаких аргументов, результат будет тем же. Вам вернется текущая метка времени UNIX. И делайте с ним в своем скрипте теперь то, что хотите.
Перевод времени из PHP в MySQL и из MySQL в PHP оказался делом плёвым. Вообще ерундовым. Я надеюсь, подключаться к своему СУБД вы уже умеете?
Подобные приемы очень часто нужны при написании алгоритмов регистрации и авторизации пользователей, а также просто при работе пользователя с HTML-формами, в которых он вводит дату и еще работает с динамическими списками select.
Creating a PHP date in the format for a SQL Timestamp insert
PHP date/time FAQ: How do I create a date in the proper format to insert a SQL Timestamp field into a SQL database?
Note: You might not need to create a PHP date
First off, you may not need to create a date in PHP like this. If you’re using plain old PHP and a database like MySQL, you can use the SQL now() function to insert data into a SQL timestamp field like this:
INSERT INTO projects (user_id, name, last_updated, date_created) VALUES (5, 'alvin', now(), now());
I just tested this with PHP and MySQL, and it works fine. So that’s one way to populate a SQL timestamp field in a SQL INSERT query.
Creating a PHP timestamp variable
However, if you want to do this all in PHP (or need to, depending on what framework you're working with), you can get the current date and time in the proper format using just PHP, like this:
If you print this out, your $timestamp field will now contain contents like this:
You can then use this formatted timestamp string in a PHP MySQL insert.
Note: Thanks to the commenters below who suggest using H:i:s instead of G:i:s .
A Drupal 7 SQL INSERT with Timestamp example
Although this isn't a standard off-the-shelf PHP/MySQL INSERT statement, here's what a SQL INSERT query looks like when I use this with Drupal 7:
$project = new stdClass(); $project->user_id = get_user_id(); $project->project_count_type = $form_state['values']['type']; $project->name = $form_state['values']['name']; $project->description = $form_state['values']['description']; # get the current time in the proper format for a sql timestamp field $timestamp = date('Y-m-d H:i:s'); # new drupal 7 style insert $id = db_insert('projects') ->fields(array( 'user_id' => $project->user_id, 'project_count_type' => $project->project_count_type, 'name' => $project->name, 'description' => $project->description, 'last_updated' => $timestamp, 'date_created' => $timestamp )) ->execute();
As you can see in the lines I’ve made bold, I’m inserting my PHP timestamp variable into two SQL fields.
Getting a timestamp for some other date and time
Note that the PHP date function defaults to the current date and time, which is exactly what I need for my purposes here. If you need to create a formatted timestamp field for some other date and time, you can do that something like this:
$timestamp = date('Y-m-d H:i:s', mktime(0, 0, 0, 7, 1, 2000));
Here are some other PHP mktime examples:
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y")); $lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y")); $nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
I pulled those examples from the PHP date page. Please see that page for more information on creating other dates and times (I'm mostly just worried about "now" at this moment).
PHP SQL Timestamp inserts
I hope these timestamp examples have been helpful. As you've seen, you can generally just use the SQL 'NOW()' function to insert into a SQL timestamp field, but if that doesn't work for some reason, you can also create a timestamp field in the proper format using just PHP and the date function.
MySQL STR_TO_DATE () функция
MySQL STR_TO_DATE () возвращает значение datetime, принимая в качестве аргументов строку и строку определенного формата.
Если значение даты, времени или даты и времени, указанное в виде строки, недопустимо, функция возвращает значение NULL. Спецификаторы формата были описаны в DATE_FORMAT () также для работы с этой функцией.
Синтаксическая диаграмма:
Версия MySQL: 5.6
Видео презентация
Ваш браузер не поддерживает видео HTML5.
Иллюстрированная презентация
Пример: функция MySQL STR_TO_DATE ()
Следующая инструкция вернет правильную дату из заданной строки 18,05,2009 в соответствии с форматом% d,% m,% Y.
SELECT STR_TO_DATE('18,05,2009','%d,%m,%Y');
mysql> SELECT STR_TO_DATE ('18, 05,2009 ','% d,% m,% Y '); + -------------------------------------- + | STR_TO_DATE ('18, 05,2009 ','% d,% m,% Y ') | + -------------------------------------- + | 2009-05-18 | + -------------------------------------- + 1 ряд в наборе (0,00 сек)
Getting a valid date from the given string according to the format '%d,%m,%Y':
Valid date query('SELECT STR_TO_DATE("18,05,2009","%d,%m,%Y")') as $row) < echo ""; echo "" . $row['STR_TO_DATE("18,05,2009","%d,%m,%Y")'] . " "; echo " "; > ?>
Valid date %> catch (Exception ex) < out.println("Can’t connect to database."); >%>
Пример: функция STR_TO_DATE (), использующая% M% d,% Y
Следующая инструкция вернет действительную дату из заданной строки 18 мая 2009 года в формате% M% d,% Y.
SELECT STR_TO_DATE('May 18, 2009','%M %d,%Y');
mysql> SELECT STR_TO_DATE ('18 мая 2009 г.', '% M% d,% Y'); + ---------------------------------------- + | STR_TO_DATE ('18 мая 2009 г.', '% M% d,% Y') | + ---------------------------------------- + | 2009-05-18 | + ---------------------------------------- + 1 ряд в наборе (0,00 сек)
Gettting a valid date from the given string according to the format '%M %d,%Y':
Valid date query('SELECT STR_TO_DATE("May 18, 2009","%M %d,%Y")') as $row) < echo ""; echo "" . $row['STR_TO_DATE("May 18, 2009","%M %d,%Y")'] . " "; echo " "; > ?>
Пример: функция STR_TO_DATE () в формате (% m /% d /% Y)
Следующая инструкция вернет правильную дату из заданной строки 18.05.2009 в формате% m /% d /% Y.
SELECT STR_TO_DATE('05/18/2009', '%m/%d/%Y');
mysql> SELECT STR_TO_DATE ('05 / 18/2009 ','% m /% d /% Y '); + --------------------------------------- + | STR_TO_DATE ('05 / 18/2009 ','% m /% d /% Y ') | + --------------------------------------- + | 2009-05-18 | + --------------------------------------- + 1 ряд в наборе (0,00 сек)
Getting a valid date from the given string according to the format '%m/%d/%Y':
Valid date query('SELECT STR_TO_DATE("05/18/2009", "%m/%d/%Y")') as $row) < echo ""; echo "" . $row['STR_TO_DATE("05/18/2009", "%m/%d/%Y")'] . " "; echo " "; > ?>
Пример: функция STR_TO_DATE () с использованием% h:% i:% s
Следующая инструкция вернет правильное время из заданной строки 11:59:59 в соответствии с форматом% h:% i:% s.
SELECT STR_TO_DATE('11:59:59','%h:%i:%s');
mysql> SELECT STR_TO_DATE ('11: 59: 59 ','% h:% i:% s '); + ------------------------------------ + | STR_TO_DATE ('11: 59: 59 ','% h:% i:% s ') | + ------------------------------------ + | 11:59:59 | + ------------------------------------ + 1 ряд в наборе (0,00 сек)
Следующая инструкция возвращает NULL, поскольку спецификатор формата% h% i% s (HOUR MINUTE SECOND) несовместим с содержимым строки 11:59:59 (HOUR : MINUTE : SECOND).
SELECT STR_TO_DATE('11:59:59','%h %i %s');
mysql> SELECT STR_TO_DATE ('11: 59: 59 ','% h% i% s '); + ------------------------------------ + | STR_TO_DATE ('11: 59: 59 ','% h% i% s ') | + ------------------------------------ + | NULL | + ------------------------------------ + 1 ряд в наборе, 1 предупреждение (0,02 с)
Пример: функция STR_TO_DATE (), использующая% W% D% M% Y% H:% i:% s формат
Следующий оператор вернет действительное значение datetime из заданной строки Понедельник, 15 сентября 2008 г. 22:23:00 в соответствии с форматом% W% D% M% Y% H:% i:% s.
SELECT STR_TO_DATE('Monday 15th September 2008 22:23:00', '%W %D %M %Y %H:%i:%s');
mysql> SELECT STR_TO_DATE («Понедельник, 15 сентября 2008 г. 22:23:00», «% W% D% M% Y% H:% i:% s»); + ------------------------------------------------- --------------------------- + | STR_TO_DATE («Понедельник, 15 сентября 2008 г. 22:23:00», «% W% D% M% Y% H:% i:% s») | + ------------------------------------------------- --------------------------- + | 2008-09-15 22:23:00 | + ------------------------------------------------- --------------------------- + 1 ряд в наборе (0,00 сек)
Все функции даты и времени:
Нажмите здесь, чтобы увидеть функции даты и времени MySQL.
Предыдущая: ВТОРАЯ ()
Далее: SUBDATE ()