Node.js с TypeORM вставляет неправильные часовые пояса в Azure SQL базу данных - PullRequest
1 голос
/ 27 мая 2020

У меня есть серверная часть, написанная поверх node.js, я использую TypeORM в качестве ORM и Azure SQL базу данных для хранения моих данных. Когда я вызываю функции ORM create () и save (), я передаю правильную дату и время, как показано ниже. Но когда я запрашиваю вставленные данные на сервере, часовой пояс сместился с -03: 00 на +00: 00. Возможно, это нормальное поведение, поскольку я новичок в работе с датами.

Это код, в котором я вызываю create () в:

class CreateAppointmentsService {
  public async execute({ provider, date }: RequestDTO): Promise<Appointment> {
    const appointmentsRepository = getCustomRepository(AppointmentsRepository);
    const roundDate = startOfHour(date);
    const foundAppointment = await appointmentsRepository.findByDate(roundDate);
    if (foundAppointment) {
      throw Error('This date and time already has a booking.');
    }
    const appointment = appointmentsRepository.create({
      provider,
      date: roundDate,
    });
    await appointmentsRepository.save(appointment);
    return appointment;
  }
}

Это мой отладочная информация, показывающая дату и время в ожидаемом часовом поясе.

Это данные в базе данных. Тип поля - datetimeoffset , а время сервера - установлен на UT C (+00: 00).

Заранее спасибо! =)

[РЕДАКТИРОВАТЬ]: Объяснение лучше: время, которое я опубликовал в базе данных, округлено до 20:00 -03: 00 (Америка / Сан-Паулу / Бразилиа). Если вы посмотрите столбец created_at, время обновится до UT C, но в столбце «данные» только часовой пояс установлен на +00: 00, время осталось 20:00.

1 Ответ

0 голосов
/ 27 мая 2020

Нашел проблему! Я забыл установить столбец «дата» на datetimeoffset в typeORM model = (.

Как это было:

  @Column()
  date: Date;

Изменено на:

  @Column('datetimeoffset')
  date: Date;

Сейчас он творит чудеса! Правильный часовой пояс устанавливается вместе со временем. Ура!

...