我在客户端有两个日期
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
如何解决这个问题?
- 是否可以在
openTime
旁边发送客户端timeZoneOffset
&closeTime
值。 - . .或者,发送
openTime
&closeTime
与自定义格式,其中添加时区到ISO字符串?
顺带一讲,我同意你用时区来格式化日期的想法。将时区部分设置为+HH:MM
或-HH:MM
(四位数字),JavaScriptDate
对象将能够正确解析它。(这是JavaScript支持的ISO 8601子集的一部分。)例如,2021-08-02T16:03:26.499+02:00
。
然后,在服务器端,要查看打开和关闭是否在同一天,您可以使用字符串比较:open.substring(0, 10) === close.substring(0, 10)
.