Node.js 使用 TypeORM 将错误的时区插入到 Azure SQL 数据库中

Node.js with TypeORM inserts wrong timezones into Azure SQL Database

我在 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;
  }
}

This is my debug information, showing date and time in expected timezone.

This is the data in the database. The field type is datetimeoffset 并且服务器时间设置为 UTC (+00:00)。

提前致谢! =)

[编辑]:更好地解释:我发布到数据库的时间四舍五入为 20:00 -03:00 (America/Sao_Paulo/Brasilia)。如果您查看 "created_at" 列,时间已更新为 UTC,但 "data" 列仅将时区设置为 +00:00,时间仍为 20:00.

找到问题了!我忘记在 typeORM 模型中将 "date" 列设置为 datetimeoffset =(.

情况如何:

  @Column()
  date: Date;

更改为:

  @Column('datetimeoffset')
  date: Date;

现在它产生了奇迹!正确的时区正在与时间一起设置。干杯!