【发布时间】:2014-02-07 09:41:27
【问题描述】:
我遇到了一个令人沮丧的问题,我整晚都在努力解决这个问题。长话短说,如果纽约的某个人在下午 2 点创建了一个活动,我希望该活动显示为晚上 8 点,以供查看欧洲日历的人使用(假设他们提前了六个小时)。
我的完整日历配置如下所示:
function renderSchedule(timezone) {
var userSchedule = $('#user-schedule').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
timezone: timezone,
ignoreTimezone: false,
events: baseurl + "load_schedule",
editable: true,
defaultView: 'agendaWeek',
firstHour: 8,
allDayDefault: false
}
我确实有更多选择,但对于这个问题来说,这些应该足够了。正如文档中提到的,fullcalendar 通过 GET 传递一个 URL,如下所示:
mysite.com / my_page / load_schedule ? start = 2014 - 02 - 02 & end = 2014 - 02 - 09 & timezone = Europe % 2FChisinau & _ = 1391660233815
然后,在后端,我正在执行以下操作以将MYSQL datetime 转换为ISO8601
$start = ($event['start']);
$end = ($event['end']);
$dateStart = new DateTime($start, new DateTimeZone($timezone));
$dateEnd = new DateTime($end, new DateTimeZone($timezone));
$dateStart - > setTimezone(new DateTimeZone($timezone));
$dateEnd - > setTimezone(new DateTimeZone($timezone));
$event['start'] = $dateStart - > format(DateTime::ISO8601);
$event['end'] = $dateEnd - > format(DateTime::ISO8601);
$newResult[] = $event;
$timezone 变量包含 Europe/Chisinau,当然它是由 fullcalendar 本身传递的。
这是上面返回到 fullcalendar 的内容:
[{"id":"5","start":"2014-02-06T14:10:00+0200","end":"2014-02-06T15:00:00+0200","title":"My title"}]
一切似乎都是正确的,但无论我尝试了什么,事件都显示为下午 2 点。
注意这很重要,我还没有提到这一点,但我正在将我选择的时区传递给renderSchedule 函数。因此,即使我位于美国东海岸,我也希望能够通过欧洲时区并相应地渲染日历。
另外,我应该指出,我使用的是测试版 (2.0),它允许传递时区字符串(我正在这样做)并通过 moment.js 使用时刻
知道我在这里做错了什么吗?
【问题讨论】:
标签: javascript php fullcalendar