首页 > 解决方案 > 将 Firestore 时间戳发送到外部 API UTC 丢失

问题描述

我在 Firestore 中存储了一个时间戳,例如 18/2/1995 00:00:00 作为 DoB 存储它 BST(+1 UTC)

我试图在函数中提取该日期,并使用该值作为主体的一部分调用 API。

无论我如何尝试和约会,我都会失去那个小时。

我努力了

  1. 火力基地的 toDate()
  2. 让日期 = 新日期(newValue.dob.seconds * 1000);
  3. 发送 ISO 字符串
  4. .toUTCString() (c# 不喜欢)
  5. c# 端的日期时间
  6. DateTimeOffset 在旁边。

目前我不确定哪一方是错的。

在 c# API 方面,我使用了 DateTimes 和 DateTimeOffsets ,使用前者,我得到的日期减去一个小时,而使用后者,我得到的日期缺少一个小时,最后是 +0:00。

这是怎么设置的。我希望 DateTimeOffset 对象只会获取 JS 中日期的任何 UTC 信息?

我正在尝试的代码

  let date = newValue.dob.toDate();
  console.log(date);
  console.log(date.getMinutes());
  console.log(date.getTimezoneOffset());
  date.setMinutes(date.getMinutes() - date.getTimezoneOffset());

  console.log(date);

  let date = new Date(newValue.dob.seconds * 1000);
  console.log(date);
  console.log(date.getMinutes());
  console.log(date.getTimezoneOffset());
  date.setMinutes(date.getMinutes() - date.getTimezoneOffset());

  console.log(date);

两次我都没有得到偏移值,这是firestore中的数据字段Firestore 中的数据字段

输出总是

输出

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


当您渲染时间戳时,它将添加操作系统可用的任何本地化时区偏移量,因为时间戳本身是基于 UTC 的。

如果要将时间戳区域化到您的区域,则必须从新的 Date 对象中找到偏移量:Date.getTimezoneOffset()然后将其添加到分钟。


推荐阅读