续集,Postgres。保存日期,包括 UTC 偏移量

Sequelize, Postgres. Save date including UTC offset

我有一个创建一些实体的应用程序(这对这个问题来说并不重要),但是这些实体可以在不同的时区创建,所以我必须在我的 createdAt 中存储 UTC 偏移量并且updatedAt 列。由于某些原因,我无法正确保存生成日期,请参考下面的代码片段,以获取更多详细信息:

这是我正在做的事情:

  const { user } = userInfoWebAPICallResult as WebAPICallResult
  const now = moment(moment.now())
    .tz(user.tz!)
    .toDate();

  const entity = await Entity.create({
    ...someData,
    createdAt: now
    updatedAt: now,
  });

我正在从外部获取 tz 值,它是一个看起来像 "America/Los_Angeles" 的字符串。如果我将 now 转换为字符串(通过调用 .format() 方法)并记录接收到的值,我将看到类似“2020-01-03T16:32:53-08:00”的内容。如您所见,日期具有偏移值,这是正确的日期,但在检查数据库时我看到“2020-01-04 00:32:53.013 00”,该字符串不再具有偏移值并且它看起来结果日期是自动计算的。

我需要按createdAt日期进行过滤,来自不同时区的人会使用这个过滤机制。我计划通过 API 公开两个参数 dateutcOffset,这将允许我根据用户时区 return 更正条目。

我错过了什么?

创建/更新实体的时间应该以 UTC 格式存储;它是一个时间戳,用于标识事件发生的确切时间点。

我建议在输出部分处理时区:将 UTC 时间戳转换为考虑用户时区的显示。

如果您需要知道创建或更新实体的用户是一天中的什么时间,我会将该用户的时区存储在单独的列中,使用标准时区标识符(如 "America/New_York" 而不是 "EDT" 或 "EST")。