始终将UTC时间存储在数据库中
只需将>
时间存储在数据库中,在客户端,获取客户端的当前时区,
在这里,我从客户系统获取IANA时区
UTC
然后,根据// get client's timezone (From user's system)
var clientTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
转换UTC
并将其显示给用户,
timezone
示例
// assume 2019-11-15T00:00:00Z is the UTC date from your database
var convertedTime = new Date('2019-11-15T00:00:00Z').toLocaleString("en-US",{timeZone: clientTimezone});
,
请注意,js Date对象只是一个表示绝对时间(独立于任何时区)的数字。
因此,用于传输和存储日期的最佳编码/格式是该数字。 IMO这比存储UTC字符串要简单得多。
因此,在最终用户的计算机上,您将对用户提供的日期字符串进行Date.parse解析,这将为您考虑用户的时区,并为您提供在后端发送和存储的绝对时间号。
如果您使用Node,则不要在后端上对日期进行任何格式或解析,因为存在严重的陷阱,并且也不需要这样做:任何需要日期字符串的客户端设备都将在本地进行格式化,会自动将其转换为适合其语言环境和时区的格式。 [编辑:我写这篇文章时,Q没有指定后端。]
您将需要在Date.parse函数中注意一些陷阱,但是与节点问题相比,这些陷阱很小。最重要的IMO是它将YYYY-MM-DD中的日期解释为ISO 8601日期(这是有道理的),但是如果未指定时区,则假定它们是GMT,因此如果您指定了时区,则应确保指定了时区使用该格式。
本文链接:https://www.f2er.com/3094856.html