计算客户端和服务器之间的日期时间(Node JS)

时间:2020-02-10 19:48:07

标签: node.js date timestamp timezone utc

我有一个应用程序,它为每个加入的成员使用订阅。我在日期和与此相关的计算方面遇到了一些问题。例如,假设某个成员于2020年2月10日10:00加入。当用户向服务器提交请求以处理订阅(服务器使用UTC)时,正在计算的日期是2/10/2020 16:00(因为我距UTC为-6:00小时)。此时该方案还可以,因为日期仍然相同(无论时间如何)。但是,如果我们在用户于19:00加入例如2/10/2020的情况下复制此方案,则在收到请求并计算日期时,结果为2/11/2020 01:00,这会产生错误由于发票的开票日期不正确(一天后),因此无法在发票中找到发票。实现此目的的最佳方法是什么?我已经阅读了很多有关此主题的内容,但是大多数页面和问题都以其他方式(从服务器到客户端)相关,以解析格式日期以显示给用户。 我对此过程有几个疑问。

  1. 我应该将UI的日期发送给API吗?或时区和 基于此,计算API中的日期? (由于服务器具有 UTC)
  2. Moment.js库有解决此问题的方法,还是应该使用带有日期的Vanilla Javascript更好?
  3. 请求中是否包含用于处理时间或日期的HTTP标头?

1 个答案:

答案 0 :(得分:0)

这实际上取决于您想要具有的行为。在尝试解决任何问题之前,请仔细考虑并决定帐单日期应基于的确切要求。

  • 用户的时区是否相关?如果是这样,您可能需要知道用户的时区是什么。您可能会为不同的发票分配不同的日期,即使它们使用的是同一UTC时间点。您的企业可能会为某些客户为何在营业日之前或之后有发票日期而感到困惑。
  • 或者您公司的时区更重要?许多业务就是这样。您的所有发票都将对齐,但是一些客户可能会对为什么发票日期在当前日期之前或之后感到困惑。
  • 对于在全球设有办事处的企业,也许有些客户会赶到附近办事处的时区。

只有您和您的公司可以决定。我可能在这里没有其他选择。这是商业决定,而不是技术决定。

关于三个问题:

  1. 这取决于您在上面的决定。
  2. 库是简化代码的一个好主意,但并不是一个硬性要求。如果您知道自己在做什么,则可以使用Date API,但是可能会发现更易于使用的库。另外,Moment处于维护模式。对于新开发,Moment团队建议您使用Luxon代替Moment。还有其他流行的现代图书馆,包括date-fnsjs-Joda
  3. date标头,但这并不能帮助您。