PHP、MySQL : SELECT by individual timezone preferences

标签 php mysql datetime timezone unix-timestamp

我有一个表(比方说)存储命中:

id |      datetime         |  ...
-----------------------------------
1  |  2014-05-30 15:19:00  |  ...
2  |  2014-06-01 12:14:00  |  ...
3  |  2014-06-04 13:06:00  |  ...
4  |  2014-06-04 17:26:00  |  ...
5  |          ...          |  ...

用户可以生成他们可以选择日期范围的报告。但是我想让用户能够使用他们自己的时区首选项。

目前我使用这样的查询来选择今天的列:

... WHERE datetime >= CURDATE()

我该怎么做?将日期存储为 unixtime 更好吗? 我已经阅读了 Google 上的所有结果,但我很困惑。

这个查询会被多次调用,所以性能非常重要

最佳答案

您可以从用户那里获取时区首选项作为国家名称,并使用它来相应地设置时区:

SET time_zone = 'Europe/Helsinki';

要为日期范围创建过滤器,您可以使用像这样的普通 where 条件:

select * from table where hit_date>=startdate and hit_date<enddate

性能:

您可以使用日期时间列创建索引,这将大大提高性能。需要记住的一点是,使用经常更新的内容作为索引通常不是一个好主意。

注意:

假设您将页面点击日期时间存储在您自己的时区中,例如亚洲/北京,并且用户将其更改为“欧洲/赫尔辛基”,在这种情况下,您应该在执行查询之前相应地转换时区使用

检索正确的结果
SELECT CONVERT_TZ('2004-01-01 12:00:00','Asia/Beijing','Europe/Helsinki');

通俗地说,您应该在执行用户查询之前找到您所在时区的时间,因为数据库是根据您所在的时区填充的。

用户时区------------>你的时区-------------->查询

关于PHP、MySQL : SELECT by individual timezone preferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24114511/

相关文章:

php - 文件未存储在正确的文件夹中

php - 在 CSV 文件中写入包含在 php 中的 HTML 表单信息

MYSQL,为日期|日期时间插入创建了用户定义的函数,但它不起作用

mysql - 执行数据库查询时出错。 MySql、Dreamweaver 和 Coldfusion

java - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure

c# - 如果 DateTime 为 NULL,则无法获取 JSON 响应

php - 克隆页面但使用不同的小部件区域

c# - ASP.NET/C# : Get nearest future date based from list of days

javascript - 将时间(hh,mm)从一个日期时间复制到另一个日期时间的最有效方法是什么?

php - 从html获取所有链接