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;
现在它产生了奇迹!正确的时区正在与时间一起设置。干杯!
我在 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;
现在它产生了奇迹!正确的时区正在与时间一起设置。干杯!