首页 > 解决方案 > 为全球所有商店创建从上午 9 点开始的促销活动

问题描述

例如,假设全球所有商店的商店促销活动从上午 9 点开始。这意味着它在芝加哥的商店从 CST 上午 9 点开始,在西雅图的商店从太平洋标准时间上午 9 点开始,在英国的商店从格林威治标准时间上午 9 点开始。

在我们promotions的 Postgres 表中,我们将此次促销的开始时间设置为 09:00:00。

每个商店都有一台带有网络浏览器的计算机,可以查找可用的促销活动。它需要将其本地时间传递给服务器,以便服务器可以返回该本地时间的所有促销活动。因此,我们需要找到一种方法来捕获 JavaScript 中的本地时间,对其进行编码,将其发送到 Java 后端,重构它,然后将其与promotions表中的开始时间进行比较。

当然,当地时间取决于时区。如果芝加哥是上午 9 点,那么芝加哥的商店应该告诉服务器现在是上午 9 点。在没有时区指示的情况下发送 UTC 时间是徒劳的。

问题:在 JavaScript 中捕获本地时间(基于时区)的好方法是什么,对其进行编码,将其发送到 Java 后端,将其重构为 Java Date,然后将该 JavaDate与 Postgres 中的上午 9 点促销开始时间进行比较数据库?

我的(不满意)方法:我能想到的最好的方法是使用 JavaScript 的方法以毫秒为单位发送 UTC 时间Date.getTime,以及时区偏移量,可以使用 JavaScript 的Date.getTimezoneOffset方法以分钟为单位计算并转换为毫秒。从 UTC 时间中减去时区偏移量(以毫秒为单位),然后我们可以Date从结果差中创建一个 Java 对象。如果是芝加哥的上午 9 点,那么希望 JavaDate将存储上午 9 点。然而,这种方法有点奇怪的是,JavaDate实际上会存储 UTC 上午 9 点,尽管它代表的是 CST 上午 9 点。这只是我对这种方法不满意的原因之一。你能想出更好的办法吗?

标签: javascriptjavadatetimetimezone

解决方案



推荐阅读