#date #serialization #typeorm
Вопрос:
Давайте начнем с предоставления определения базы данных рассматриваемой сущности:
@Column({ name: "last_seen", type: "timestamp", nullable: true })
@Index()
public lastSeen: Date | null = null;
@CreateDateColumn({ name: "created", type: "timestamp", nullable: false })
public created!: Date;
База данных-UTC, но сервер (в разработке) находится в часовом поясе «Азия/Тегеран». Насколько я знаю, TypeORM должен хранить даты в формате UTC и преобразовывать их обратно в местное время при извлечении.
Однако, и я думаю, что это происходит недавно, так как я не помню, чтобы у меня была подобная проблема в этом проекте, который продолжается уже 6 месяцев, но даты теперь хранятся в необработанном виде. Например, если я сохраню 10:00 4:30
в javascript для lastSeen
свойства, оно будет сохранено недействительно как 10:00
.
С другой стороны, при чтении дат, которые автоматически создаются базой данных в «UTC», например, как в случае со created
свойством, значение считывается в локальном часовом поясе, а не преобразуется из «UTC». В этих случаях данные правильно хранятся в базе данных в «UTC».
Есть ли вариант, который я здесь упускаю в отношении преобразования даты и времени с помощью TypeORM?
Комментарии:
1.Я думаю, что вы должны использовать
timestamptz
(метку времени с часовым поясом) вместо базовогоtimestamp
. Дополнительную информацию смотрите в этой статье. Более того, насколько я знаю,timestamptz
это всегда лучший/предлагаемый подход.2. Это не имеет смысла, поскольку TimestamptZ хранит данные о часовых поясах, и это может усложнить базу данных вместо того, чтобы помочь с ней.
3. @CarloCorradini хорошо, это имеет смысл, спасибо, постараюсь, здесь имена с меткой времени и timestamptz, мягко говоря, плохие.