首页 > 解决方案 > 可以在请求中发送客户端时区偏移量吗?

问题描述

我在客户端上有两个日期

openTime: 2020-01-01 00:00:000 (GMT+2)
closeTime: 2020-01-01 06:00:000 (GMT+2)

在将其发送到服务器之前,我将它们转换为 ISO

openTime.toISOString() // 2019-12-31T22:00:00.000Z
closeTime.toISOString() // 2020-01-01T04:00:00.000Z

服务器接收这些日期并应用验证逻辑

isSameDay(openTime, closeTime) // false

比较结果为假。它的发生是因为时区。每当openTime这样的时间转换为 UTC 时,日期“跳转”到不同的日期。

转换为 ISO 之前
openTime: 2020-01-01 00:00:000

转换为 ISO 后
openTime: 2019-12-31T22:00:00.000Z

如何解决这个问题?

  1. 是否可以将客户发送到&值timeZoneOffset旁边。openTimecloseTime
  2. ..或者,使用将时区添加到 ISO 字符串的自定义格式发送openTime& ?closeTime

标签: javascriptnode.js

解决方案


FWIW,我会采用您的用时区格式化日期的概念。将时区设为+HH:MM-HH:MM(四位数),JavaScriptDate对象将能够正确解析它。(这是 JavaScript 支持的ISO 8601子集的一部分。)例如,2021-08-02T16:03:26.499+02:00.

然后,在您的服务器端,要查看开盘和收盘是否在同一天,您可以使用字符串比较:open.substring(0, 10) === close.substring(0, 10).


推荐阅读