基于此更改时区并从MySQL获得结果



我正在研究一个具有许多不同数据的新项目,并且所有这些都存储在数据库中,并在相同的时区时间戳,东海岸,我确保服务器时区已切换通过

加载任何东西之前
date_default_timezone_set("America/New_York");

但是,我似乎无法缠绕它,我想拥有一个允许时区选择的搜索功能,如果他们选择西海岸时区,我应该只更改PHP部分怎么办?还是我应该以不同的方式查询数据库?所有数据都非常敏感,事实证明,很难将其包裹在我的头上。

任何帮助或逻辑都将不胜感激:p

主要问题是MySQL对时区的支持是可笑的。大多数其他数据库允许您将时区定义为DateTime列的一部分,而不是MySQL。相反,它们强迫您进行整个连接或服务器范围的时区设置。

您最好的选择是确保MySQL将所有数据存储为GMT/UTC。您可以通过在连接上运行SET time_zone = 'UTC'来执行此功能。在设置字符集的同时执行此操作。您设置连接字符集, right

PHP侧,您可以使用DateTime和DateTimeZone的组合从MySQL中获取数据,并将其显示在用户的时区中。例如,让我们假装我们从MySQL DATETIME列获得日期2012-11-13 14:15:16。从PHP交互提示中:

php > $from_mysql = '2012-11-13 14:15:16';
php > $utc = new DateTimeZone('UTC');
php > $ts = new DateTime($from_mysql, $utc);
php > $pdt = new DateTimeZone('America/Los_Angeles');
php > $ts_pdt = clone $ts;
php > $ts_pdt->setTimezone($pdt);
php > echo $ts_pdt->format('r'), "n";
Tue, 13 Nov 2012 06:15:16 -0800

如所示,您只需要通过明确告诉您是UTC来创建日期时间,如果UTC不是使用date_default_timezone_set设置的时区。切换DateTime的时区就像给它新的时区一样容易。我在这里使用clone来处理副本。数据量是可变的,有时很容易发现自己不小心抓住它。

反向日期数学以相同的方式工作,只需将他们的选择转换为UTC并在本机数字上运行数学。

tl; dr:

  • store 仅在UTC(GMT)中的数据
  • 中执行计算
  • display 仅在用户时区中的所有数据记录

相关内容

  • 没有找到相关文章

最新更新