PHP,Codeigniter:如何在Web应用程序中根据用户时区/位置设置日期/时间?

Abs*_*Abs 10 php timezone datetime codeigniter

我刚刚意识到,如果我将特定记录添加到我的MySQL数据库中 - 它将具有服务器的日期/时间而不是特定用户以及它们所在的位置,这意味着我按日期搜索功能是无用的!因为当他们在时区中添加它而不是在服务器时区中添加时,他们将无法搜索.

Codeigniter中是否有一种方法可以全局设置特定于用户位置的时间和日期(可能使用其IP),并且每次调用date()或time()时都会使用用户时区.

我实际要求的可能是如何使我的应用程序依赖于每个用户时区?

也许最好将每个用户时区存储在他们的个人资料中并有一个标准时间(服务器时间),然后将时间转换为每个用户?

谢谢大家

Sha*_*ane 5

听起来您需要做的是将系统中的所有日期和时间存储为UTC时间(以前称为GMT).这是世界上所有事物都是通过调整来计算的基准时间.(例如:中心时间距离UTC约-6小时)

在MySQL中,只要您的服务器和数据库配置了正确的时间和时区设置,您就可以使用UTC_TIMESTAMP()来获取当前的UTC时间.

在PHP中运行此命令将PHP的时间戳设置为UTC(您将在代码中运行它,因此将其放在每个页面或集中索引文件中):

date_default_timezone_set('UTC');
Run Code Online (Sandbox Code Playgroud)

或者您可以直接进入PHP.INI并告诉它全局使用UTC时间.(如果您在单个PHP安装上有多个网站,这可能无效.

然后在系统中的任何位置,您需要获得当前的UTC时间,您可以调用:

time();
Run Code Online (Sandbox Code Playgroud)

然后,对于系统中的每个用户,您将需要询问他们所处的时区,然后在显示时间时对该用户进行调整.因此,如果是UTC时间下午5:00,我住在美国复活节(-5),那么时间将是5:00 - 5小时=中午12:00.

这可能是一个很长的过程,但一旦你做了你的用户会发现它非常有用,特别是在国际上.


Pek*_*ica 4

我认为最简单的方法是为内部数据存储定义一个时区(您的服务器的时区或UTC),并在输出时根据用户的时区转换时间。

我不了解 CodeIgniter,所以我无法向您指出正确的函数。一个著名的时区感知库是 Zend_Date:使用时区我还没有使用过这些函数,但它们看起来很有前途。

但是,一旦您知道用户的时区,就不难组合一个自己的函数,在输出日期和/或时间时添加/减去偏移量。

可能相关的问题: