По умолчанию любая дата/временная метка, хранящаяся в postgres, находится в стандартном формате UTC. Postgres имеет тип столбца DATE, в котором хранится только часть даты полного timestamp.
При использовании typeorm для postgres и использовании репозиториев дата извлекается как есть. Тем не менее, когда вы делаете что-то с необработанным запросом, например:
const queryRunner = await this.connection.createQueryRunner();
await queryRunner.connect()
const response = await queryRunner.query('SELECT * FROM MY_VIEW WHERE AGE=23');
Для столбца с той же датой (только) я получаю что-то вроде этого, значение которого равно «1999-01-02».
{
name: 'mleko',
age : '23',
dob : '1999-01-01:T22:00:00:000Z',
address: 'xyz'
}
Я не уверен, где именно происходит это преобразование, возможно, в основном драйвере, который использует typeorm, но как мне сказать typeorm не выполнять это преобразование для даты, уже находящейся в UTC, снова в UTC.
@LaurenzAlbe, это всего лишь свидание
Это просто потому, что у javascript такая слабая система типов. В javascript нет типа «Дата» (он называется «Дата», но не представляет даты), и большинство библиотек даты/времени не вводят его. В машинописи может быть более взрослая библиотека.
@RichardHuxton, как вы думаете, есть обходной путь для этого без разрешения на другую форму?
1) Это «По умолчанию любая дата/временная метка, хранящаяся в postgres, находится в стандартном формате UTC». неправильно. Это относится только к timestamp with time zone. 2) date не имеет часового пояса, поэтому что-то превращает ваше значение даты в отметку времени.
Извините @mleko, я на самом деле не разработчик javascript, но все, с чем я когда-либо сталкивался, просто предлагает дату и время / временную метку и ничего более сложного.
Возможно, стоит взглянуть на Luxon и TS(typescript)Luxon.





Итак, способ, которым я обошел это, заключался в приведении необработанного запроса:
const queryRunner = await this.connection.createQueryRunner();
await queryRunner.connect()
const response = await queryRunner.query('SELECT name, age, dob::VARCHAR, address FROM MY_VIEW WHERE AGE=23');
это позволит избежать любых преобразований
Каков тип данных столбца PostgreSQL?