从数据库呈现的全日历事件不考虑时区

Fullcalendar events render from DB without regard to timezone

我目前有一个使用 PHP 和 MYSQL (AWS RDS) 设置的全日历应用程序。

事件开始和结束时间作为字符串存储在数据库中,类似于 Fri Mar 29 2019 09:00:00 GMT-0700 (Pacific Daylight Time),来自 event.startevent.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' 更改时区时,没有任何反应。

任何 help/suggestions 将不胜感激,谢谢!

如果您的日期字符串采用您在问题中描述的格式,例如

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 \G\M\TO+', $date_string);

echo $date->format('Y-m-d H:i:s');

输出:

2019-03-29 09:00:00

Demo on 3v4l.org