Как преобразовать дату и время mysql в PHP в формат m / d / y? - PullRequest
11 голосов
/ 28 августа 2009

Я пытаюсь преобразовать mysql DATETIME в этот формат m / d / y, но код ниже не работает, возвращает 31.12.1969 вместо этого, может кто-то показать мне, как это сделать?

$fromMYSQL = '2007-10-17 21:46:59'; //this is the result from mysql DATETIME field
echo date("m/d/Y", $fromMYSQL);

Ответы [ 6 ]

42 голосов
/ 28 августа 2009

Я думаю, что вы действительно хотите это:

$fromMYSQL = '2007-10-17 21:46:59';
echo date("m/d/Y", strtotime($fromMYSQL));

Второй аргумент даты - это отметка времени, и я думаю, что происходит, когда PHP видит вашу строку как отметку времени -1 ... таким образом, 12/31/1969.

Итак, чтобы получить метку времени из строковой версии даты, вы используете strtotime

7 голосов
/ 28 августа 2009

SQL:

SELECT whatever, UNIX_TIMESTAMP(date) date FROM table WHERE whatever

PHP:

date('m/d/Y', $result['date']);
3 голосов
/ 30 августа 2009

Лучший способ - преобразовать формат даты напрямую в строку запроса:

$TimeFormat = "%m/%d/%Y";  // your pref. Format

$sql = "SELECT DATE_FORMAT(DateCol , '" . $TimeFormat . "') as ConvertDate FROM tblTest";

В противном случае вы можете изменить эту функцию в соответствии с вашими потребностями:

function format_date($original, $format) {
    if (empty($original)) {
        $original = date("Y-m-d H:i:s");
    }
    $original = ereg_replace("30 Dez 1899", "30-01-1973", $original);
    $format = ($format=='date' ? "%m-%d-%Y" : $format);
    $format = ($format=='germandate' ? "%d.%m.%y" : $format);
    $format = ($format=='germandaydate' ? "%A, %d.%m.%Y" : $format);
    $format = ($format=='germantime' ? "%H:%M" : $format);
    $format = ($format=='germandatetime' ? "%d.%m.%y %H:%M:%S" : $format);
    $format = ($format=='datetime' ? "%m-%d-%Y %H:%M:%S" : $format);
    $format = ($format=='mysql-date' ? "%Y-%m-%d" : $format);
    $format = ($format=='mysql-datetime' ? "%Y-%m-%d %H:%M:%S" : $format);
    $format = ($format=='mssql-date' ? "%Y%m%d" : $format);
    $format = ($format=='mssql-datetime' ? "%Y%m%d %H:%M:%S" : $format);
    $format = ($format=='Ymd' ? "%Y-%m-%d" : $format);
    return !empty($original) ? strftime($format, strtotime($original)) : "";
}
2 голосов
/ 28 августа 2009

Я рассмотрел это в своем ответе на h ttp: //stackoverflow.com/questions/499014/i-need-to-change-the-date-format-using-php/499021#499021 - в основном, date() ожидает метку времени Unix, из которой он вычисляет дату / время и форматирует ее. Вы передаете строку, полученную из результата запроса MySQL, который, вероятно, искажается при вводе уткой PHP в нечто, похожее на метку времени Unix, но не имеет смысла.

Я объясняю пару подходов к работе со столбцами даты в моем ответе.

2 голосов
/ 28 августа 2009

Вам нужна заглавная буква Y в строке формата даты. нижний регистр y обозначает год из двух цифр, а верхний регистр Y обозначает год из четырех цифр.

$fromMYSQL = '2007-10-17 21:46:59';
echo date("m/d/Y", strtotime($fromMYSQL));

Страница руководства по PHP На дату может оказать некоторую помощь.

1 голос
/ 28 августа 2009

Два выпуска:

1) Вам нужен капитал Y

2) Вам нужен правильный тип даты.

Попробуйте

$fromMYSQL = date_create  ('2007-10-17 21:46:59');    
echo date("m/d/Y", $fromMYSQL);

Упс, strtotime - правильное преобразование в метку времени. date_create возвращает объект DateTime.

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