我目前有一个使用 PHP 和 MYSQL (AWS RDS) 设置的完整日历应用程序。
事件开始和结束时间以字符串的形式存储在数据库中,看起来像Fri Mar 29 2019 09:00:00 GMT-0700 (Pacific Daylight Time)
,这些字符串来自event.start
和event.end
属性。
然后,使用 load.php(由events: load.php
调用)加载它们,如下所示:
<?php
include 'dbconfig.php';
$conn = $dbConnection;
$query = "SELECT * FROM Events ORDER BY id";
$statement = $conn->prepare($query);
$statement->execute();
$data = $statement->fetchAll();
$results = array();
foreach($data as $row) {
$results[] = array(
'id' => $row["id"],
'title' => $row["title"],
'resourceId' => $row["resource"],
'start' => $row["start_event"],
'end' => $row["end_event"]
);
}
echo json_encode($results);
在这一点上,它们显示;但是,它们总是比它们应该显示的时间提前 7 小时(例如09:00:00
变成了16:00:00
)。
我认为这是因为当数据来自数据库时,它以某种方式忽略了时区,但是当我使用timezone: 'UTC'
更改时区时,没有任何反应。
任何帮助/建议将不胜感激,谢谢!
如果您的日期字符串采用您在问题中描述的格式,例如
Fri Mar 29 2019 09:00:00 GMT-0700 (Pacific Daylight Time)
您应该能够使用date_create_from_format
将它们解析为DateTime
对象,例如
$date_string = 'Fri Mar 29 2019 09:00:00 GMT-0700 (Pacific Daylight Time)';
$date = date_create_from_format('D M d Y H:i:s GMTO+', $date_string);
echo $date->format('Y-m-d H:i:s');
输出:
2019-03-29 09:00:00
3v4l.org 演示