在FullCalendar上启用时区

Wal*_*lla 1 jquery fullcalendar

我正在重建一个需要时区支持的现有项目。通过json-feed可以很好地呈现事件。示例数据:

[{
    "id":"1",
    "title":"Titel",
    "start":"2016-10-08T12:00:00+02:00",
    "end":"2016-10-08T12:30:00+02:00",
}]
Run Code Online (Sandbox Code Playgroud)

如您所见,该事件具有时区数据。(2016-10-08T12:00:00+02:00

我想使用eventDrop更新事件,当用户拖放事件时,数据(eventId,start_time,end_time)被发送到PHP,这将更新数据库。

我的PHP脚本应将接收到的start_time和end_time转换为UTC并将其写入数据库。

问题是,fullcalendar不会将事件的时区传递给我的PHP。我试图通过类似的东西:

event_start: moment(event.start).format("YYYY-MM-DD HH.mm:ssZZ"),
Run Code Online (Sandbox Code Playgroud)

我得到的数据是这样的:

event_start: 2016-10-08 12.00:00+0000
Run Code Online (Sandbox Code Playgroud)

我希望它会是这样的:

event_start: 2016-10-11 12.00:00+0200
Run Code Online (Sandbox Code Playgroud)

利用时区信息,我可以轻松地将其转换为UTC。

如何在PHP端访问时区?

Luí*_*ruz 5

您需要将timezone属性设置为“ UTC”。因此,类似:

$('#calendar').fullCalendar({
        events: [{
            "id":"1",
            "title":"Title",
            "start":"2016-10-08T12:00:00+02:00",
            "end":"2016-10-08T12:30:00+02:00"
        }],
        timezone: 'UTC'
    });
Run Code Online (Sandbox Code Playgroud)

之后,检索事件时,您应该tzm: 120start每个事件上看到一个,并且应该能够在服务器端获取正确的时区。

我用一个按钮来创建这个jsfiddle,该按钮可以检索事件以及可以在其中进行验证的按钮。


好的,如果要获取日期时间,则有两个选择:

  1. timezone属性设置为所需的本地。例如,如果您使用00:00+02:00,则可以将时区设置为timezone: 'Europe/Belgrade'

  2. 只是根本不设置timezone(将其保留为默认值false

然后,您可以使用获取日期时间event.start.format()。查看此小提琴以获取演示。