Подскажите, пожалуйста, как преобразовать дату в нужный мне формат?
Читаю дату из БД и пытаюсь преобразовать в нужный фомат. Получаю следующее:
echo date( 'Y-m-d H:i', $myrow2[0]);
//Результат: 1970-01-01 00:00
Если использовать функцию преобразования строки в дату, то тоже не помогает:
echo date( 'Y-m-d H:i', strtotime($myrow2[0]));
//Результат: 1970-01-01 00:00
Если выводить просто дату, как есть, то:
echo $myrow2[0];
//Результат: 19 ноя 2009 0:30
И почему PHP по умолчанию выбрал именно такой ("19 ноя 2009 0:30") формат?
Спустя 48 минут, 30 секунд (19.11.2009 - 13:38) sergeiss написал(а):
Цитата (ViTYAi @ 19.11.2009 - 13:50) |
И почему PHP по умолчанию выбрал именно такой ("19 ноя 2009 0:30") формат? |
Скорее, это формат, выбранный по умолчанию в БД. Потому что другие БД выдают другой формат даты

Для преобразования даты-времени можно использовать функцию strtotime() или объект DateTime.
Подробнее см. в хэлпе.
Спустя 1 минута, 59 секунд (19.11.2009 - 13:40) twin написал(а):
Цитата |
И почему PHP по умолчанию выбрал именно такой ("19 ноя 2009 0:30") формат? |
Поклёп. Не мог он этого сделать. Посмотри что в базе в этой ячейке.
Спустя 55 минут, 17 секунд (19.11.2009 - 14:35) glock18 написал(а):
Цитата |
Поклёп. Не мог он этого сделать. Посмотри что в базе в этой ячейке. |
уверен, что там не дата даже. ибо для того чтобы mysql выдавал дату в таком виде нужно сделать две вещи:
1. установить локаль
2. при выборке отформатировать дату
что-то мне подсказывает, что ни один из этих пунктов не был выполнен.
Спустя 38 минут, 57 секунд (19.11.2009 - 15:14) ViTYAi написал(а):
Цитата |
Поклёп. Не мог он этого сделать. Посмотри что в базе в этой ячейке. |
В базе в этой ячейке дата и время. Выглядит вот так "2009-11-19 00:03:00.000"
Спустя 2 минуты, 7 секунд (19.11.2009 - 15:16) ViTYAi написал(а):
Цитата |
для того чтобы mysql выдавал дату в таком виде |
База MS SQL. В этом поле хранится дата и время и выглядит вот так "2009-11-19 00:03:00.000".
Спустя 1 минута, 42 секунды (19.11.2009 - 15:18) ViTYAi написал(а):
Цитата |
Скорее, это формат, выбранный по умолчанию в БД. Потому что другие БД выдают другой формат даты |
Ну ладно, допустим...
Цитата |
можно использовать функцию strtotime() |
Использовал - не работает:
echo date( 'Y-m-d H:i', strtotime($myrow2[0]));
//Результат: 1970-01-01 00:00
Спустя 2 минуты, 19 секунд (19.11.2009 - 15:20) glock18 написал(а):
Цитата |
База MS SQL |
да, вижу теперича. запрос покажи
Спустя 56 секунд (19.11.2009 - 15:21) glock18 написал(а):
ViTYAi
strtotime ессно не будет работать с "ноя" в качестве месяца. локаль надо устанавливать.
если вывод из базы делается с тысячными секунды, то это еще одно объяснение.
strtotime ессно не будет работать с "ноя" в качестве месяца. локаль надо устанавливать.
если вывод из базы делается с тысячными секунды, то это еще одно объяснение.
Спустя 3 минуты, 23 секунды (19.11.2009 - 15:25) ViTYAi написал(а):
Цитата |
запрос покажи |
вот запросец:
SELECT data_date, value0
FROM data
WHERE parnumber=12
and item='$item'
and object='$object'
and data_date>='2009-11-19 00:30:00'
and data_date<='2009-11-20 00:00:00'
Спустя 4 минуты, 6 секунд (19.11.2009 - 15:29) ViTYAi написал(а):
Цитата |
локаль надо устанавливать |
на серваке с БД или на веб-серваке? Они на разных машинах крутятся...
Цитата |
вывод из базы делается с тысячными секунды |
А как сделать? Функцией substr() обрезать миллисекунды?
Спустя 11 минут, 9 секунд (19.11.2009 - 15:40) glock18 написал(а):
Цитата |
echo $myrow2[0]; //Результат: 19 ноя 2009 0:30 |
mssql возвращает дату в таком виде. вообще должна быть какая-нибудь функция типа date_format чтобы отучить его от этого. пых сам не сможет понять что такое "ноя". чтобы понял нужно установить нужную локаль пыху (set_locale), чтобы он понял что за "ноя". Вообще по локализации погугли, потому что set_locale (или setlocale ??) это не все, что нужно.
альтернатива - форматируй дату на сервер баз данных.
Спустя 1 час, 7 минут, 23 секунды (19.11.2009 - 16:47) sergeiss написал(а):
Еще вариант (правда, извратный несколько) использовать функции получения отдельных элементов из даты. В MSSQL они должны быть. С помощью этих функций можно гарантированно собрать самом нужный формат даты. Который будет работать вне зависимости от всяких локалей и другой "лабуды".
Всё это делаем на стороне БД, и в ПХП получаем только уже готовую дату..
Всё это делаем на стороне БД, и в ПХП получаем только уже готовую дату..
Спустя 3 часа, 23 минуты, 33 секунды (19.11.2009 - 20:11) S{oRpiO написал(а):
че париться там есть пробелы в дате так.. так.
берем
$array = explode(" ",$myrow2[0]);
а там собираем как хотим из масива
берем
$array = explode(" ",$myrow2[0]);
а там собираем как хотим из масива
Спустя 1 час, 11 минут, 20 секунд (19.11.2009 - 21:22) sergeiss написал(а):
S{oRpiO - оно можно и так, для данного сервера это будет правильно. В первом приближении.
Но если что-то где-то будет поменяно в настройках, или надо будет перейти на другой сервер, то проблема опять выплывет.
Поэтому лучше ее решить изначально, чтобы всё было ясно и понятно.
Но если что-то где-то будет поменяно в настройках, или надо будет перейти на другой сервер, то проблема опять выплывет.
Поэтому лучше ее решить изначально, чтобы всё было ясно и понятно.
Спустя 2 часа, 8 минут, 12 секунд (19.11.2009 - 23:30) Grazor написал(а):
Цитата (glock18 @ 19.11.2009 - 15:40) |
date_format |
именно оно и есть. почему бы не сделать так?
SELECT date_format(data_date,'%Y-%m-%d %H:%i'), value0 FROM data
WHERE parnumber=12 and item='$item' and object='$object' and data_date>='2009-11-19 00:30:00' and data_date<='2009-11-20 00:00:00'
Спустя 49 минут, 21 секунда (20.11.2009 - 00:20) S{oRpiO написал(а):
ну незнаю лично мне както не проблемно настроить чтоб всё работало даже интересно просто все зависит от того что и для кого пишется..
Спустя 4 часа, 51 минута, 4 секунды (20.11.2009 - 05:11) ViTYAi написал(а):
Цитата |
берем $array = explode(" ",$myrow2[0]); |
не совсем понял, как это поможет...
$array = explode(" ",$myrow2[0]);
echo $array[0]; //19
echo $array[1]; //ноя
echo $array[2]; //2009
echo $array[3]; //<пусто>
echo $array[4]; //0:30
Спустя 10 минут, 59 секунд (20.11.2009 - 05:22) ViTYAi написал(а):
Цитата |
почему бы не сделать так? SELECT date_format(data_date,'%Y-%m-%d %H:%i'), value0 FROM data WHERE parnumber=12 and item='$item' and object='$object' and data_date>='2009-11-19 00:30:00' and data_date<='2009-11-20 00:00:00' |
MS SQL выдаёт:'date_format' is not a recognized function name.
Это не для MySQL функция случайно?
Спустя 3 часа, 36 минут, 36 секунд (20.11.2009 - 08:58) sergeiss написал(а):
Цитата (sergeiss @ 19.11.2009 - 17:47) |
Еще вариант (правда, извратный несколько) использовать функции получения отдельных элементов из даты. В MSSQL они должны быть. |
В продолжение этой темы.
Есть такая функция в SQL, называется EXTRACT. Как раз для работы с датой-временем. Должна быть во всех БД.
Примеры:
extract( day from date_column)
extract( month from date_column)
и так далее (а еще там есть dow, week, second и много-много чего другого).
Выбрав части даты-времени, их можно скомпоновать в любой последовательности, прямо в запросе.
Спустя 2 дня, 21 час, 27 минут, 12 секунд (23.11.2009 - 06:26) ViTYAi написал(а):
Цитата |
Есть такая функция в SQL, называется EXTRACT. |
Не могу заставить работать эту фнкцию в Microsoft SQL Server 2000 (8.00.760) Microsoft Corporation Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 2)
Спустя 4 часа, 1 минута, 45 секунд (23.11.2009 - 10:27) sergeiss написал(а):
ViTYAi - а она есть в описалове к этой версии сервера?
Спустя 4 часа, 20 минут, 23 секунды (23.11.2009 - 14:48) ViTYAi написал(а):
Цитата |
а она есть в описалове к этой версии сервера? |
нет...
Спустя 14 часов, 2 минуты, 58 секунд (24.11.2009 - 04:51) ViTYAi написал(а):
Проблема решена на уровне запроса SQL:
select convert(varchar(23), ПОЛЕ,120) from ТАБЛИЦА
Спустя 5 часов, 29 минут (24.11.2009 - 10:20) DedMorozzz написал(а):
мб лучше сразу в запросе выводить нужным видом. что-то типа :
DATE_FORMAT(data_data,'%d.%m.%Y %H:%i') AS date
Естественно выбрав нужную форму вывода.
Хм. на 2м листе уже написали )
DATE_FORMAT(data_data,'%d.%m.%Y %H:%i') AS date
Естественно выбрав нужную форму вывода.
Хм. на 2м листе уже написали )
Спустя 4 дня, 11 часов, 5 минут, 25 секунд (28.11.2009 - 21:25) Dezigo написал(а):
сделай прямо в SELECT преобразования.
используй CAST и CONVERT
http://msdn.microsoft.com/en-us/library/ms187928.aspx
используй CAST и CONVERT
http://msdn.microsoft.com/en-us/library/ms187928.aspx