PHP / MySQL: конвертировать из ГГГГ-ММ-ДД в ДД Месяц, ГГГГ? - PullRequest
2 голосов
/ 13 апреля 2009

У меня в таблице MySQL есть столбец DATE, который представляет дату в этом формате: ГГГГ-ММ-ДД.

Я хочу получить дату из базы данных, используя PHP, но отображать ее так: ДД Месяц, ГГГГ.

Например, с «2009-04-13» по «13 апреля 2009 года».

Ведьма - лучший способ сделать это ?? (Я знаю, как получить дату из БД. Мне нужно только знать, как ее преобразовать)

Мне также нужно отображать названия месяцев на испанском языке. Есть способ сделать это, не переводя каждый месяц, используя strplc или что-то в этом роде?

Я новичок в программировании, пожалуйста, будьте в курсе.

Спасибо !!!

Ответы [ 8 ]

7 голосов
/ 13 апреля 2009

См. Функцию DATE_FORMAT () в MySQL. Я думаю, это лучший способ сделать это для вас.

Также вы можете сделать это:

  • Получить вашу дату из БД
  • Используйте strtotime в PHP, чтобы конвертировать в unix time
  • Затем отформатируйте время, используя date .

Используя функцию date (), вы сможете получать названия месяцев на испанском языке, когда устанавливаете локаль в PHP с помощью setlocale .

1 голос
/ 13 апреля 2009

Вы также можете пропустить часть strtotime (), используя UNIX_TIMESTAMP (date) в вашем MySql select. Но помните, что это специфичная для MySQL функция, и в будущем она может быть не переносимой.

1 голос
/ 13 апреля 2009

Выполнить следующие запросы MySQL:

SET lc_time_names = 'es_ES';
SELECT DATE_FORMAT(t.date,'%e de %M, %Y') FROM your_table t ...

С MySQLi это будет:

$mysqli->query("SET lc_time_names = 'es_ES'");
$stmt = $mysqli->prepare("SELECT DATE_FORMAT(t.date,'%e de %M, %Y') FROM your_table t ...where id = ?");
...
0 голосов
/ 04 февраля 2019

$ origDate = "2018-04-20";

$ newDate = date ("d-m-Y", strtotime ($ origDate)); echo $ newDate;

0 голосов
/ 04 февраля 2019

Это поможет вам конвертировать, как вы хотите:

$dob ='2009-04-13';
echo date('d M Y', strtotime($dob));
0 голосов
/ 13 апреля 2009

Лично мне нравится использовать целочисленные типы данных в MySQL для хранения дат в формате отметок времени UNIX. Я оставляю всю обработку этого целого до PHP. Хранение таблиц и запросов как можно проще всегда приносило мне пользу. Преимущественно, в коде, который я пишу, для дат выполняются какие-то вычисления. Все это делается на стороне PHP и всегда в формате отметки времени UNIX. Хранение или извлечение дат в любом другом формате, кроме формата метки времени UNIX, просто означает еще один шаг для появления ошибок и делает запрос менее модульным. Способ форматирования даты лучше оставить до последней минуты перед ее отображением. Это только мое мнение, но если нет экстремальных обстоятельств, когда вы не можете обработать значение БД после извлечения, дата не должна быть отформатирована на стороне SQL.

Упрощенный пример:

<?php

$date = now();
$dueDate = $date + 60*60*24*7; // One week from now

$sqlInsert = "INSERT INTO reports SET `dueDate` = $date";
$resInsert = mysql_query( $sqlInsert );

$sqlSelect = "SELECT `dueDate` FROM reports";
$resSelect = mysql_query( $sqlSelect );
$rowSelect = mysql_fetch_array( $resSelect );

$DB_dueDate = $rowSelect['dueDate'];

$daysUntilDue = ( $DB_dueDate - now() ) / 60*60*24;

$formattedDueDate = date( "j F, Y", $DB_dueDate );

?>

The report is due on <?=$formattedDueDate?>.  That is <?=$daysUntilDue?> from now.
0 голосов
/ 13 апреля 2009

Еще один вариант, еще не упомянутый:

SQL:

SELECT UNIX_TIMESTAMP(date) FROM table

PHP:

print date('your format', $timestamp_from_the_db);
0 голосов
/ 13 апреля 2009

Простейшим способом является использование функции strtotime () для нормализации ввода в метку времени UNIX.

Затем используйте функцию date () для вывода даты в любом формате, который вы пожелаете. Обратите внимание, что вам нужно передать метку времени UNIX в качестве второго аргумента функции date ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...