Страница 1 из 1

вывод данных типа date

Добавлено: 23 ноя 2004, 15:40
ivan1982
Здравствуйте, коллеги.
Сталкнулся с такой проблнмой:
база:

Код: Выделить всё

SET SQL DIALECT 3;

CREATE DATABASE 'x.x.x.x:/var/interbase/stat2.gdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET WIN1251;
таблица:

Код: Выделить всё

CREATE TABLE AGREEMENTS (
    AID INTEGER NOT NULL,
    CID INTEGER NOT NULL,
    ATYPE INTEGER NOT NULL,
    NUM VARCHAR (128) CHARACTER SET WIN1251 COLLATE WIN1251,
    SDATE DATE,
    EDATE DATE,
    OSID INTEGER NOT NULL,
    FIODIR VARCHAR (256) CHARACTER SET WIN1251 COLLATE WIN1251,
    DELETED INTEGER,
    COMMENT VARCHAR (256) CHARACTER SET WIN1251 COLLATE WIN1251);

коннект

Код: Выделить всё

	function connect( $user = '', $pass = '', $db = '' ,$charset = '',$buffers = 0, $dialect = 3){

    		$this->conn = ibase_connect($db, $user, $pass, $charset, $buffers, $dialect);

//    		$this->conn = ibase_connect($db, $user, $pass, $charset);
                      
                print ibase_errmsg();
		if ($this->conn){
	           ibase_timefmt('%d.%m.%Y %H:%M:%S');
	           ibase_timefmt('%H:%M:%S',IBASE_TIME);
  	           ibase_timefmt('%d.%m.%Y',IBASE_DATE);
		}
		return $this->conn;
	}
EMS Interbase/FireBird Manager отображает данные в таблице правильно
При выводе из php скрипта данных таблицы для некоторых aid из agreements поле sdate отображается правильно, а для некоторых ввиде TIMESTAMP соответсвующего хранящейся в поле дате.

Подскажите в чем может быть проблема?

Re: вывод данных типа date

Добавлено: 24 ноя 2004, 12:38
Dmitry Beloshistov
ivan1982 писал(а): EMS Interbase/FireBird Manager отображает данные в таблице правильно При выводе из php скрипта данных таблицы для некоторых aid из agreements поле sdate отображается правильно, а для некоторых ввиде TIMESTAMP соответсвующего хранящейся в поле дате.
Подскажите в чем может быть проблема?
Посмотри php.ini на наличие:
ibase.dateformat = "%d.%m.%Y";
ibase.timestampformat = "%d.%m.%Y %H:%M:%S";
ibase.timeformat = "%H:%M:%S";

Добавлено: 24 ноя 2004, 12:50
ivan1982
строчек таких не было...
пробовал их добавлять - не помогает...
функция ibase_timefmt() заменят эти дерективы

Добавлено: 24 ноя 2004, 12:59
Dmitry Beloshistov
ivan1982 писал(а):строчек таких не было...
пробовал их добавлять - не помогает...
функция ibase_timefmt() заменят эти дерективы
Хм... Вбей в ini настройки и все. Или тебе надо на лету менять формат вывода? Если нет - зачем тебе вообще эта ibase_timefmt()? По ходу дела ты (насколько помню php) просто получаешь формат даты от сервера.

Добавлено: 24 ноя 2004, 13:21
ivan1982
Так, по-моему меня не поняли...
Мне всего лишь нужно чтобы данные поля типа DATE отображались в нормальном формате (нормальный формат - хотя бы одинаково), а сейчас я получаю вот что:
Изображение
Странная закономерность - 2 нормально, 2 коряво.

На экран выводится результат SELECT.

Добавлено: 24 ноя 2004, 14:10
kdv
блин, ну PHP ваш глючит, эта самая функция ibase_timefmt().
поля DATE, TIME, TIMESTAMP с сервера клиенту приходят всегда только в числовом виде. и это дело клиента разобрать это число и показать в правильном формате.

кстати. поскольку "проблемное" число одинаковое, есть подозрение что это какая то кривая дата, правда какая именно, понять не могу. все равно ж в DATE хранится число дней. Либо эта функция так показывает null.

и вообще, прежде чем морочить голову людям, взял бы и посмотрел на эту же самую выборку в ЛЮБОМ ДРУГОМ НОРМАЛЬНОМ ИНСТРУМЕНТЕ. И сравнил, что там за дата и почему ibase_timefmt() так ее показывает.

p.s. сейчас совсем осерчаю и прибью этот топик как не относящийся к IB/FB :)

Добавлено: 24 ноя 2004, 14:33
ivan1982
да уже понятно что php...
EMS показывает правильно (кстати про это написано выше).
DELPHI тоже.
ЧЕРЕЗ API тоже всё нормально.

Сорри за ОффТоп.

Добавлено: 24 ноя 2004, 15:39
kdv
интересно все же, что это за дата такая хитрая. случаем, не, 29 февраля?

Добавлено: 24 ноя 2004, 16:16
ivan1982
нет :) .
Сегодняшняя. И вчерашняя.
это от конкретной даты не зависит. Я так понимаю что пхп не воспринимает последние 2 из 4х записей как тип DATE. А воспринимает их как INT. Может я конечно ошибаюсь...

Добавлено: 24 ноя 2004, 20:59
kdv
думаю что ошибаешься. PHP не может воспринимать "две последние записи" иначе чем любые другие. При выполнении запроса с сервера сначала приходит однозначный список столбцов и их типов. И все поля всех записей выводятся в соответствии с этими типами. Поэтому если в разных записях одного результата виден разный формат вывода данных - то это косяк конкретной функции, преобразующей двоичное значение в строку.

Добавлено: 23 дек 2004, 07:17
flipper
а можешь привести код где ты все это дело делаешь(запрос) и выводишь?