Остановить дальнейшее преобразование даты, которое уже находится в UTC

По умолчанию любая дата/временная метка, хранящаяся в 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.

Каков тип данных столбца PostgreSQL?

Laurenz Albe 22.11.2022 16:49

@LaurenzAlbe, это всего лишь свидание

mleko 22.11.2022 16:50

Это просто потому, что у javascript такая слабая система типов. В javascript нет типа «Дата» (он называется «Дата», но не представляет даты), и большинство библиотек даты/времени не вводят его. В машинописи может быть более взрослая библиотека.

Richard Huxton 22.11.2022 16:55

@RichardHuxton, как вы думаете, есть обходной путь для этого без разрешения на другую форму?

mleko 22.11.2022 16:59

1) Это «По умолчанию любая дата/временная метка, хранящаяся в postgres, находится в стандартном формате UTC». неправильно. Это относится только к timestamp with time zone. 2) date не имеет часового пояса, поэтому что-то превращает ваше значение даты в отметку времени.

Adrian Klaver 22.11.2022 17:34

Извините @mleko, я на самом деле не разработчик javascript, но все, с чем я когда-либо сталкивался, просто предлагает дату и время / временную метку и ничего более сложного.

Richard Huxton 22.11.2022 18:13

Возможно, стоит взглянуть на Luxon и TS(typescript)Luxon.

Adrian Klaver 22.11.2022 22:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, способ, которым я обошел это, заключался в приведении необработанного запроса:

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');  

это позволит избежать любых преобразований

Другие вопросы по теме