我正在创建一个网站,我需要使用注册用户的时区,根据他们在仪表板中设置的内容来确定他们是否可以在特定日期接收电子邮件。
我想解决的主要问题是,我希望在结果的顶部显示那些现在可用的用户,以避免人们不得不在页面上搜索才能找到可用的用户。
我对一个可以用来在用户页面上显示/隐藏电子邮件表单的功能有一个大致的想法。。。它更多地是关于搜索页面上的查询,该查询将显示所有用户以及如何最好地排序结果。
默认时区为GMT。
因此,如果今天是星期一,并且以下用户的可用性设置为:
USER | timezone | availability_today | emails_received
1 | America/Los_Angeles | 2 | 1 (still available)
2 | America/New_York | 0 | 0 (not available)
3 | Europe/London | 1 | 1 (not available)
我认为更多的是我实际保存/访问的日期/时区的问题。在电子邮件表中,id有一个DATE_SENT列,这样我就可以计算发送了多少封电子邮件,并与它们的可用性进行比较。但如果网站是GMT…如果用户在美国或澳大利亚,那就不是正确的时间。。。
就像我说的,更多的是关于搜索页面上的select语句,我无法计算出所有时区。我的主机不支持CONVERT_TZ。
还是我只是在格林尼治标准时间计算?
我肯定问这个问题和你读这个问题一样困惑。希望有人能理解并提出建议。这可能不像我想象的那样令人困惑。
编辑:-
问题:
假设是星期一GMT。在用户(而非访客)所在的国家/地区是星期二,他们的可用性设置为0。如果我在服务器上使用格林尼治标准时间是星期一,那么电子邮件就会通过。在星期二(用户所在国家为星期三),他们不会得到一个。
访问者无需注册即可查看搜索结果。如果他们想给用户发电子邮件,就需要这样做。用户页面很容易处理一次转换。
几个选项。。。
(1) 将GMT中的所有内容存储在datetime列中。您可以通过执行MySQL查询(如)在您的端执行操作
SELECT 'my date' - INTERVAL 5 HOUR
(2) 将所有内容存储在用户当前时区的时间戳列中。您可以通过执行查询来设置当前数据库连接的时区。。。
SET time_zone = 'Europe/London'
使用查看当前时区
SELECT @@time_zone;
将'Europe/London'
替换为正确的时区。当MySQL使用时间戳时,它会在内部以GMT存储数据。当你将数据提取出来时,MySQL会自动将时间转换回客户端当前设置的任何时区。
以epoch时间存储时间,仅使用FROM_UNIXTIME()进行转换以显示。忘记多个时区,正如索科洛夫先生雄辩地说的那样,
那样会导致的疯狂