【发布时间】:2013-04-12 21:27:40
【问题描述】:
我正在寻找在任何浏览器中使用同一时间在国际上预订服务的最佳做法/解决方案。我不太明白逻辑(也在这里挖)。
用例
- 布鲁塞尔预订的用户可以说位于新加坡的理发服务 - 他将在一周内飞往那里。他在浏览器日期时间控件中选择了 14:00。但是,浏览器设置为 +1 UTC。
- SG 理发师应将其日程中的时间视为 SG 时间 14:00。
- 理发店老板正在迪拜旅行,尽管他的浏览器暂时设置为 +4 UTC,但他希望看到他的日程仍然在 SG 时区。
基本上,所有角色都必须在当地时间看到“理发店”,无论他们在哪个 TZ,并在“店”时间向服务器报告。
服务器时间为 UTC,时间戳以 unix 秒为单位。 “商店”TZ 是众所周知的。
问题是我使用了几个在内部使用浏览器本地时间的 jquery 插件(datetimepicker 和日历),并且有几千行代码需要分析和修复,使其不太受支持 - 浏览器在(布鲁塞尔|任何其他TZ)对于每个“新日期()”将获得本地浏览器时间。还有一些狭窄的地方(因为这些想象中的“理发店”遍布全球,并且是从地图上挑选出来的,所以目标 TZ 是动态的)。
通常的做法是什么?
是不是更容易
- 在不关心时区的 js 中模拟“动态”基准日期,并提供给插件
- 在加载到客户端时将服务器数据转换为本地 TZ
- 应用其他解决方案
非常感谢
PS 我已经阅读了best practices - 但正如我所说,我一定会使用特定的插件。
解决方案:
我意识到我不需要这些日期时间的相对值,因为我从不需要按时间比较不同“理发店”的书籍(我仍然可以重新计算每个“理发店”的纬度/经度如果需要,相对时间)。
基本上我只需要 absolute UTC 值,无论时区如何,在这种情况下,unix 时间(自 1970 年 UTC 以来的秒数)非常适合。
现在我不是在客户端通过用户浏览器偏移量更正时间,将其发送到后端,然后通过目标偏移量在那里修复它,而是在客户端和服务器/数据库端以明确的 UTC 日期运行整个系统,存储并显示给所有角色,只有日期/时间过滤器例外,它们绑定到本地浏览器时钟而不存储在任何地方。
【问题讨论】:
-
迈克,感谢您的评论。问题出在客户端;日期字段值在进出浏览器的过程中会经过几层过滤、验证和转换。此外,无论我在服务器端使用什么,无论如何都需要进行客户端转换 - 日期 13-04-2556 是我今天居住的日期,我不是来自未来。
标签: jquery date timezone unix-timestamp