跨浏览器的时区相同的日期时间 - 在预订引擎(Same datetime across timezo

2019-08-22 13:10发布

我在寻找最好的做法/解决国际预订服务,使用同一时间在任何浏览器。 我不完全得到逻辑(这里太周围挖)。

用例

  • 用户在布鲁塞尔预订可以说,总部设在新加坡的理发服务 - 他在一个星期飞那里。 他拿起在浏览器日期时间控制14:00。 该浏览器,但是,设置为+1 UTC。
  • SG发型师应该看到的时间在他的议程14:00 SG时间。
  • 理发店老板在迪拜旅行,他希望仍然可以看到他的日程在SG时区,尽管他的浏览器临时设置为+4 UTC。

基本上,所有的角色都必须看“理发店”当地时间不管是什么TZ他们都在,并在“商店”时间报告给服务器。

服务器时间是UTC,时间戳在UNIX秒。 “商店” TZ是已知的。

问题是,我用夫妇利用浏览器当地时间内部的jQuery插件(的DateTimePicker和日历),并有几千行代码来分析和修复,使其不太支持的 - 浏览器(布鲁塞尔|其他任何TZ)为每一个“新的Date()”将获得本地浏览器的时间。 有相当长的一段狭窄的地方以及(如这些想象中的“理发店”在全球范围内找到并从地图采摘,因此目标TZ是动态的)。

什么是针对常见的做法?

是不是更容易

  • 在JS模拟“动态”基准日不关心时区,并喂插件
  • 加载到客户端时转换服务器数据到本地TZ
  • 适用于一些其他的解决办法

非常感谢

PS我看过最好的做法 -但正如我所说,我有点绑定到使用特定的插件。

解决方案

我意识到,我是我从来没有需要比较不同的“理发店”时间上的书不需要这些日期时间的相对值(有LAT /每个“店铺” LNG如果需要的话我还可以重计算的相对时间)。

基本上,我只需要绝对 UTC值无论时区,并在这种情况下UNIX时间(秒自1970年以来UTC)完全吻合。

取而代之的修正通过用户的浏览器在客户端偏移的时候,把它发送到后台,并通过目标偏移有固定它,现在我跑明确的UTC日期整个系统,无论是在客户端和服务器/数据库边,存储和显示所有角色,具有唯一例外的日期/时间过滤器,这必将对本地浏览器时钟和不存储。

Answer 1:

有几个方法,你可以去这个问题。

选项1

  • 忘掉UTC,浏览器的时区,以及目标时区。 只是把他们当作未指定日期时间。
  • 服务器和客户端之间,不传整数蜱或秒 - 这些都是必然UTC。 取而代之的是,通过本地日期时间作为ISO8601的字符串,而没有偏移或“Z”。
  • 使用moment.js解析并没有引入浏览器的偏移格式化字符串。 例如:

     // to get a Date value suitable for use with an existing control or script. var date = moment('2013-04-19T14:00').toDate(); // to get a string back from a Date that's ready to go to your server. var str = moment(date).format('YYYY-MM-DDTHH:mm'); 
  • 在服务器端,这取决于你是什么平台上。 可能是已经支持ISO8601。 例如,在净它只是.ToString("o") 如果你需要在这个特定的提醒,请您介绍一下您的服务器平台/语言。

选项2

  • UTC转移到日期时间/使用ISO8601以其“Z”说明你的服务器。
  • 您的日期工作任何时候,使用TZDB JavaScript库,如我列出的那些之一在这里 。 转换到/自UTC和目标时区 - 忽略浏览器的时区。
  • 这会工作得很好,现在你在谈论一个特定的时刻,而不是某个不确定的本地时间。 然而,这些库需要大量的数据,并且可能是矫枉过正这样一个简单的任务。 除非你有很多其他的转换做,比如预约时间转换为其他时区,我不推荐这样做。


文章来源: Same datetime across timezones in browser - on a booking engine