gpt4 book ai didi

php - 如何通过传递用户时区日期来获取数据库中今天的最新记录?

转载 作者:行者123 更新时间:2023-11-29 20:51:40 25 4
gpt4 key购买 nike

我尝试过,但在这种情况下没有成功。

实际上数据值是根据用户时区日期保存的,

所以我想动态传递一些参数来检查并从数据库获取值。但问题是我如何将参数作为用户时间传递给 mysql 查询?

每天,如果 User1 有 10 条记录,我只需要基于用户时区日期的最近一小时记录。

$select = db_select('{emp}', 'e');
$select -> addField('e', 'name', 'name');
$select -> addField('e', 'date', 'date');
$select -> condition('e.name', $name);
$select->where('date >= DATE_SUB(NOW(), INTERVAL 1 HOUR)');
$select -> orderBy('e.date', 'DESC')->range(0,1);
$subresult = $select -> execute()-> fetchObject();

在该查询中 now() 作为系统时间,在那个地方我如何传递用户的时间?

有什么帮助吗?

最佳答案

看这个。 How to handle MySQL timezone in script

要存储时间数据,使其对不同时区的用户来说看起来正确,您需要做几件事。

首先,要求每个用户指定她的时区。 These are specified as strings例如'America/New_York''Asia/Dili'。将该信息存储为每个用户个人资料的一部分。

接下来,每次从应用程序建立从应用程序到 MySQL 的连接时,请使用如下命令设置连接时区:

SET time_zone = users-time-zone-choice

最后,始终以 TIMESTAMP 数据类型存储时间信息,而不是 DATEDATETIME 数据类型。 TIMESTAMP 值在存储时始终从本地时间转换为 UTC,并在检索时始终转换回本地时间。

因此 timestamp_column >= NOW() - INTERVAL 2 HOUR 和类似查询可以正常工作。

datetime_column >= NOW() - INTERVAL 2 HOUR 不起作用。

然后,NOW() 函数将显示用户的本地时间。 TIMESTAMP 数据项的内容也是如此。 DATETIMEDATE 对象的内容将不会以用户本地时间显示;它们总是被存储和检索,而不受时区的影响。

最好将服务器默认时区设置为 UTC。

你可以试试这个;这些命令应该会给您一些有趣的结果。

set time_zone = 'Asia/Dili';
select @@time_zone, now(), utc_timestamp();
set time_zone = 'America/Phoenix';
select @@time_zone, now(), utc_timestamp();
set time_zone = 'Asia/Jerusalem';
select @@time_zone, now(), utc_timestamp();

关于php - 如何通过传递用户时区日期来获取数据库中今天的最新记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37990204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com