Php 更改时区并基于此从MYSQL获取结果
我正在做一个新的项目,它有很多不同的数据,都存储在数据库中,具有相同的时区时间戳,东海岸,我确保在通过Php 更改时区并基于此从MYSQL获取结果,php,mysql,timezone,Php,Mysql,Timezone,我正在做一个新的项目,它有很多不同的数据,都存储在数据库中,具有相同的时区时间戳,东海岸,我确保在通过 date_default_timezone_set("America/New_York"); 然而,我似乎不能把我的头围绕它,我想有一个搜索功能,允许时区选择,如果他们选择西海岸时区,我应该只改变PHP的一部分吗?或者我应该以不同的方式查询数据库?所有的数据都是非常时间敏感的,事实证明我很难把这些数据用头脑来描述 任何帮助或逻辑都将不胜感激:p主要问题是MySQL对时区的支持是可笑的。大多数
date_default_timezone_set("America/New_York");
然而,我似乎不能把我的头围绕它,我想有一个搜索功能,允许时区选择,如果他们选择西海岸时区,我应该只改变PHP的一部分吗?或者我应该以不同的方式查询数据库?所有的数据都是非常时间敏感的,事实证明我很难把这些数据用头脑来描述
任何帮助或逻辑都将不胜感激:p主要问题是MySQL对时区的支持是可笑的。大多数其他数据库允许您将时区定义为datetime列的一部分,但MySQL不允许。相反,它们会强制您进行连接范围或服务器范围的时区设置 最好的办法是确保MySQL将所有日期时间存储为GMT/UTC。您可以通过在connect上运行
设置时区='UTC'
来强制执行此操作。在设置角色集的同时执行此操作。您正在设置连接字符集,对吗
在PHP方面,您可以使用和的组合从MySQL获取日期时间,并在用户的时区中显示它们。例如,让我们假设我们从MySQLDATETIME
列中获取日期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不是您使用date\u default\u timezone\u set
设置的时区,您只需要通过明确告诉它您是UTC来创建DateTime。切换日期时间的时区就像给它一个新时区一样简单。我在这里使用了clone
来制作副本。日期时间是可变的,有时很容易发现自己不小心撞到了它
反向日期数学的工作方式相同,只需将其选择转换为UTC,并对本机数字运行数学
tl;博士:
- 仅以UTC(GMT)为单位存储和执行日期时间计算
- 仅显示用户时区中的所有日期时间