[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как преобразовать дату в нужный формат
ViTYAi
Приветствую всех!

Подскажите, пожалуйста, как преобразовать дату в нужный мне формат?
Читаю дату из БД и пытаюсь преобразовать в нужный фомат. Получаю следующее:
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") формат?

Скорее, это формат, выбранный по умолчанию в БД. Потому что другие БД выдают другой формат даты smile.gif

Для преобразования даты-времени можно использовать функцию 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 ессно не будет работать с "ноя" в качестве месяца. локаль надо устанавливать.
если вывод из базы делается с тысячными секунды, то это еще одно объяснение.

Спустя 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]);

а там собираем как хотим из масива

Спустя 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м листе уже написали )

Спустя 4 дня, 11 часов, 5 минут, 25 секунд (28.11.2009 - 21:25) Dezigo написал(а):
сделай прямо в SELECT преобразования.
используй CAST и CONVERT
http://msdn.microsoft.com/en-us/library/ms187928.aspx
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.