PHP/MySQL Timezone Clarification(PHP/MySQL 时区说明)
问题描述
我目前在思考将我的 MySQL 时间转换为特定时区的想法时遇到了一个问题,具体取决于用户的设置.
I'm currently having an issue wrapping my brain around the notion of converting my MySQL time to a specific timezone, depending on the user's settings.
我所有的 MySQL 时间都以 UTC 时间存储,格式如下:
All of my MySQL times are stored in UTC time, in the following format:
2009-11-08 17:06:40
查询时间后,我不太确定如何使用 PHP 将其转换为适当的时区.
Once I query the time, I'm not quite sure how to convert it to the appropriate timezone using PHP.
因此,在上面的示例中,我想显示:
Thus, in the example above, I'd like to display:
2009-11-08 09:06:40
这是我目前拥有的(可能需要修复):
Here's what I currently have (which probably needs to be fixed):
$sql = 'SELECT date FROM mytable';
require("connection.php");
$result = mysql_db_query($DBname,$sql,$link);
while($row = mysql_fetch_assoc($result)) {
$dt_obj = new DateTime($row['date']);
$dt_obj->setTimezone(new DateTimeZone('PST'));
echo $dt_obj;
echo "<br>";
}
首先,我收到以下错误:
First off, I get the following error:
可捕获的致命错误:DateTime 类的对象无法转换为字符串
其次,我很困惑我是否正确设置它以在正确的时区显示时间(在本例中为 PST).
Secondly, I am confused as to whethere I'm setting it up properly to display the time in the correct timezone anyway (in this case, PST).
任何有关如何执行此操作的建议将不胜感激.谢谢!
Any suggestions on how to do this would be greatly appreciated. Thanks!
更新:
我接受了 GZipp 的建议,并将代码修改为:
I took GZipp's advice, and modified the code to look like:
$dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $dt_obj->format('Y-m-d H:i:s');
但是,我的时间(使用上面的示例)显示为:
However, it's displaying my time (using the example from above) as:
2009-11-08 15:06:40
有什么想法会导致这种情况吗?
Any ideas on what would be causing this?
推荐答案
我想这就是你所追求的;
I think this is what you're after;
$dt_obj = new DateTime($row['date']);
$dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $dt_obj->format('Y-m-d H:i:s');
使用支持的时区列表.
更新已编辑问题:为确保 PHP 将数据库中的时间视为 UTC 时间,请执行以下操作:
Update to edited question: To ensure that PHP sees the time from the database as UTC time, do something like this:
$row['time'] = '2009-11-08 09:06:40';
$dt_obj = new DateTime($row['time'], new DateTimeZone('UTC'));
echo 'UTC: ' . $dt_obj->format('Y-m-d H:i:s') . '<br />'; // UTC: 2009-11-08 09:06:40
$dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo 'Los Angeles: ' . $dt_obj->format('Y-m-d H:i:s'); // Los Angeles: 2009-11-08 01:06:40
这篇关于PHP/MySQL 时区说明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:PHP/MySQL 时区说明
基础教程推荐
- Cron Jobs 调用带有变量的 PHP 脚本 2022-01-01
- PHP 类:全局变量作为类中的属性 2021-01-01
- 在PHP中根据W3C规范Unicode 2022-01-01
- 有什么方法可以用编码 UTF-8 而不是 Unicode 返回 PHP`json_encode`? 2021-01-01
- YouTube API v3 点赞视频,但计数器不增加 2022-01-01
- 学说 dbal querybuilder 作为准备好的语句 2022-01-01
- 如何在 Laravel 中使用 React Router? 2022-01-01
- 如何替换eregi() 2022-01-01
- PHP PDO MySQL 查询 LIKE ->多个关键词 2021-01-01
- 如何在 Laravel 5.3 注册中添加动态下拉列表列? 2021-01-01
