PHP,代码点火器 : How to Set Date/Time based on users timezone/location globally in a web app?

标签 php datetime codeigniter timezone

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

在 Codeigniter 中有没有一种方法可以全局设置特定于用户位置的时间和日期(可能使用他们的 IP)以及每次调用 date() 或 time() 时都使用用户时区。

What I am actually asking for is probably how to make my application dependent on each users timezone?

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

谢谢大家

最佳答案

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

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

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

date_default_timezone_set('UTC');

或者您可以直接进入 PHP.INI 并告诉它在全局范围内使用 UTC 时间。 (如果您在一个 PHP 安装上有多个网站,这可能不起作用。

然后在系统的任何地方你需要得到当前的 UTC 时间你可以调用:

time();

然后对于系统中的每个用户,您将需要询问他们所居住的时区,然后在显示时间时针对该用户进行调整。因此,如果现在是世界标准时间下午 5:00,而我住在美国复活节 (-5),则时间将为 5:00 - 5 小时 = 中午 12:00。

这可能是一个漫长的过程,但一旦你做到了,你的用户就会发现它非常有用,尤其是在国际上。

关于PHP,代码点火器 : How to Set Date/Time based on users timezone/location globally in a web app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2274568/

相关文章:

php foreach出错了

PHP Composer 无法为我的项目解析 composer.json 文件

php - Docker连接到本地主机

sql - 转换或转换 varchar 行,如 (Mon Jul 18 19 :28:36 EDT 2018) To DateTime

java - 我需要在 Postgres 中格式化日期

codeigniter - $this->db->e​​scape() 函数在 codeigniter 中添加单引号

php - 在 Linux 中使用 PHP 检查进程是否正在运行

PHP:为什么 strtotime 转换会给出不同的值并且仅限于特定日期?

python - 如何在Python中创建时间戳变量?

php - Codeigniter - join() 只返回一个 "first table"