|
|
|
|
Edmund |
Вторник, 14 Марта 2006, 2:15
|
Участник
Профиль
Группа: Гость форума
Сообщений: 4
Регистрация: 14.03.2006
Пользователь №: 10879
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Народ, помогите разобраться. БД хранит дату почему-то в формате YYYY-MM-DD. А я привык и мои друзья для которых я делаю простенькую страничку к формату DD-MM-YYYY. Что мне посоветуете?
|
|
|
|
|
zeroku |
Вторник, 14 Марта 2006, 11:50
|
Добрый монстр
Профиль
Группа: WinCity Team
Сообщений: 1076
Регистрация: 06.06.2002
Из: г. Москва
Пользователь №: 2365
Конфигурация
Корпус: -- Процессор: Другой Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
так перед тем как попасть в БД, скорее всего дата как то определяется. А в том файле, с которого ты собираешься записывать в БД делаешь
$date = date("d-m-Y");
затем
$sql= mysql_query("INSERT INTO ...");
и я думаю , что все
--------------------
С уважением, Сергей
|
|
|
|
|
Админ |
Вторник, 14 Марта 2006, 16:33
|
Администратор
Профиль
Группа: WinCity Team
Сообщений: 670
Регистрация: 01.10.2000
Пользователь №: 1
Конфигурация
Корпус: Sony VAIO VGN-FW21MR Процессор: Centrino/Core Duo Материнская плата: Intel PM45 Оперативная память: 4096 Мб DDR2 800 МГц Видеокарта: ATI Mobility Radeon HD3470 256 Мб GDDR3 Жесткий диск (винчестер): 320 Гб Serial ATA 5400 об/мин TOSHIBA MK3252GSX Дисковод: Нет дисковода CD/DVD: Blu-Ray, MATSHITA BD-MLT UJ230AS Модем: встроенный Сетевой адаптер: встроенный, Marvell Yukon 88E8055 PCI-E Gigabit Ethernet Controller Звуковая плата: встроенная, Realtek ALC262 Монитор: 17'' Samsung SyncMaster 757NF Операционная система: Vista Home Premium x64 SP2 Прочее: WiFi встроенный Intel(R) WiFi Link 5100 ABG
|
Выбранную из БД дату преобразовать премерно так: $d = date("d-m-Y",$date_from_db);
--------------------
"Спорит либо дурак, либо подлец. Первый - не знает, а спорит, второй - знает, но спорит" Геральт из Ривии, ведьмак (© А. Сапковский, Сага о Ведьмаке)
|
|
|
|
|
Edmund |
Среда, 15 Марта 2006, 0:04
|
Участник
Профиль
Группа: Гость форума
Сообщений: 4
Регистрация: 14.03.2006
Пользователь №: 10879
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Спасибо ребята но проблема похоже глубже.
В БД установлен формат представления Даты в виде Y-M-D соответственно если я буду пытаться писать в БД например 01.01.2000 в в неё запишется 0001.01.20 или что-то подобное, уже пробовал. Возможно это можно изменить в настройках но я не нашёл где. Второе: выражение вида $d = date("d-m-Y",$date_from_db); выдаёт 01-01-1970 на любую дату которая была в БД. Возможно её сначала к какому-то другому виду привести надо? Не знаю уж что делать всю лоступную доку перерыл ничего нет тут только опыт поможет.
|
|
|
|
|
pan |
Среда, 15 Марта 2006, 8:41
|
Участник
Профиль
Группа: WinCity Team
Сообщений: 2101
Регистрация: 11.11.2001
Из: крепость Владивосток
Пользователь №: 653
Конфигурация
Корпус: -- Процессор: Другой Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Edmund, дату в БД хранить советую в виде unix-timestamp'а. Т.е. в виде кол-ва секунд, прошедших с начала эпохи (1.01.1970). Таким образом, отведя для даты VARCHAR(20), ты можешь хранить там числовую метку вида, например, 113811123. Эта метка получается функцией time() - она возвращает ТЕКУЩЕЕ кол-во секунд, прошедших с начала этой самой эпохи. В БД пиши именно timestamp. После выборки данных из БД, timestamp пропускается через функцию, например, date: Код // пусть $row['date'] = 113811123 - timestamp нужной нам даты
echo date("l dS of F Y h:i:s A", $row['date']); // выведет "Friday 10th of August 1973 05:12:03 PM" Если так проблему не получится решить, то приведи сюда sql-код для создания той таблицы, что ты используешь - попросту говоря ее дамп. Посмотрим... Добавлено GeizeR, Для справки: http://ru.php.net/timehttp://ru.php.net/datehttp://ru.php.net/strtotimehttp://ru.php.net/getdate
|
|
|
|
|
zeroku |
Среда, 15 Марта 2006, 10:52
|
Добрый монстр
Профиль
Группа: WinCity Team
Сообщений: 1076
Регистрация: 06.06.2002
Из: г. Москва
Пользователь №: 2365
Конфигурация
Корпус: -- Процессор: Другой Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Цитата(GeizeR @ Среда, 15 Марта 2006, 5:41) Edmund, дату в БД хранить советую в виде unix-timestamp'а. Т.е. в виде кол-ва секунд, прошедших с начала эпохи (1.01.1970). Таким образом, отведя для даты VARCHAR(20), ты можешь хранить там числовую метку вида, например, 113811123. Эта метка получается функцией time() - она возвращает ТЕКУЩЕЕ кол-во секунд, прошедших с начала этой самой эпохи. В БД пиши именно timestamp. После выборки данных из БД, timestamp пропускается через функцию, например, date: Код // пусть $row['date'] = 113811123 - timestamp нужной нам даты
echo date("l dS of F Y h:i:s A", $row['date']); // выведет "Friday 10th of August 1973 05:12:03 PM" Если так проблему не получится решить, то приведи сюда sql-код для создания той таблицы, что ты используешь - попросту говоря ее дамп. Посмотрим... Добавлено GeizeR, Для справки: http://ru.php.net/timehttp://ru.php.net/datehttp://ru.php.net/strtotimehttp://ru.php.net/getdate спасибо, Сань! очень помогло и мне)) оказывается много нового узнал тока что
--------------------
С уважением, Сергей
|
|
|
|
|
Edmund |
Четверг, 16 Марта 2006, 1:11
|
Участник
Профиль
Группа: Гость форума
Сообщений: 4
Регистрация: 14.03.2006
Пользователь №: 10879
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Спасибо, GeizeR. Дамп с этой БД : Код Datenbank driv auf localhost # phpMyAdmin SQL Dump # version 2.5.3 # http://www.phpmyadmin.net # # Host: localhost # Erstellungszeit: 15. März 2006 um 22:30 # Server Version: 4.0.15 # PHP-Version: 4.3.4 # # Datenbank: `driv` #
# --------------------------------------------------------
# # Tabellenstruktur für Tabelle `aktivitet` #
CREATE TABLE `aktivitet` ( `id` int(11) NOT NULL auto_increment, `date_an` date NOT NULL default '0000-00-00', `date_zu` date default '0000-00-00', `iniziator` varchar(100) NOT NULL default 'DRIV', `name` varchar(100) NOT NULL default '', `beschreibung_kurz` varchar(200) default NULL, `link` varchar(100) default NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM COMMENT='Aktiviteten des Verein' AUTO_INCREMENT=48;
# # Daten für Tabelle `aktivitet` #
INSERT INTO `aktivitet` VALUES (1, '2006-11-07', '2006-04-30', ' Integrationsrat MG', ' Runder Tisch', '', 'http://localhost/aktiv.php');
но главное, что дата должна вводиться из формы, а не как текущая дата. В форму вводится планируемая дата в привычном виде (dd-mm-yyyy). Соответственно если хранить дату в юникс-формате то её как-то преобразовать нужно сначало в формат yyyy-mm-dd (ещё не представляю как это сделать, строковыми функциями можно себе мозги свернуть да и выглядит это неэлегантно) а затем как timestamp и сохранять в БД. Этот-то этап мне и не нравится. Неужели нельзя заставить mySQL хранить дату по человечески в привычном для европейцев формате?
|
|
|
|
|
pan |
Четверг, 16 Марта 2006, 10:38
|
Участник
Профиль
Группа: WinCity Team
Сообщений: 2101
Регистрация: 11.11.2001
Из: крепость Владивосток
Пользователь №: 653
Конфигурация
Корпус: -- Процессор: Другой Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Используй этот sql: Код CREATE TABLE `aktivitet` ( `id` int(11) NOT NULL auto_increment, `date_an` date NOT NULL default '0000-00-00', `date_zu` date default '0000-00-00', `timestamp` varchar(20) default NULL, `iniziator` varchar(100) NOT NULL default 'DRIV', `name` varchar(100) NOT NULL default '', `beschreibung_kurz` varchar(200) default NULL, `link` varchar(100) default NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM COMMENT='Aktiviteten des Verein' AUTO_INCREMENT=48; Цитата(Edmund @ Сегодня, 9:11) но главное, что дата должна вводиться из формы, а не как текущая дата. В форму вводится планируемая дата в привычном виде (dd-mm-yyyy). Есть функция strtotime() (http://ru.php.net/strtotime). Она совершает операции, обратные функции date - по введенной дате в GNU формате она возвращает ее (даты) timestamp. Возвращает -1, если введенная дата не соответствует GNU формату. Так вот, получив от юзера с формы дату, ты проверяешь ее следующим образом (из оф. мануала PHP): Код <?php // $_POST['date'] - предполагается, что поле с датой на форме имеет имя date, а форма - метод post if (($timestamp = strtotime($str)) === -1) { echo "Строка ($str) недопустима"; } else { echo "$str == " . date('l dS of F Y h:i:s A', $timestamp); } ?> Таким образом, введя в поле "Дата" значение "12-12-2005", ты получишь timestamp = 1527426000. Что, естесственно неверно. Поэтому код, приведенный выше, надо преобразовать так: Код // $_POST['date'] - предполагается, что поле с датой на форме имеет имя date, а форма - метод post $_POST['date'] = str_replace(" ", "", $_POST['date']); // убираем пробелы // тут вставь проверку на корректность введенных данных (см. регулярные выражения) // получаем день, месяц, год list($day, $month, $year) = explode("-", $_POST['date']); // преобразовываем в GNU формат (согласен, страшно выглядит, но можно и причесать) $new_date = $year."-".$month."-".$day; // все, у тебя есть введенная юзером дата в GNU формате. Теперь прогоняем через strtotime() if (($timestamp = strtotime($new_date)) === -1) { echo "Строка ($new_date) недопустима"; } else { echo "$new_date == " . date('l dS of F Y h:i:s A', $timestamp); } Цитата Неужели нельзя заставить mySQL хранить дату по человечески в привычном для европейцев формате? Можно сделать все. Но лучше, как говорится, переустройство мира начать с самого себя - привыкай делать так, как надо, а не менять под себя. Добавлено GeizeR, Да, кстати. К слову о форме и поле для ввода даты пользователем: лучше сделай три выпадающих списка: ДЕНЬ МЕСЯЦ ГОД Уверен, видел в интернете. И с такими разделенными данными будет работать и тебе и пользователю гораздо проще.
|
|
|
|
|
Edmund |
Четверг, 16 Марта 2006, 11:15
|
Участник
Профиль
Группа: Гость форума
Сообщений: 4
Регистрация: 14.03.2006
Пользователь №: 10879
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Большое спасибо GeizeR за внимание и терпение, ты избавил меня от головной боли. Был бы рад бы ть тебе чем-то полезным. До свидания.
|
|
|
|
|
|
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
|
0 Пользователей:
|
|
© Copyright by WinCity.Ru 2001 - 2008 | Обратная связьУслуги веб-хостинга предоставлены компанией MTW.RU
|
|