Javascript 完整日历时区不修改客户端上的时间';终点
我经历了一个令人沮丧的问题,我整晚都在处理这个问题。长话短说,如果纽约有人在下午2点创建活动,我希望该活动显示为晚上8点,供在欧洲查看日历的人观看(比方说,他们提前了6个小时) 我的完整日历配置如下所示:Javascript 完整日历时区不修改客户端上的时间';终点,javascript,php,fullcalendar,Javascript,Php,Fullcalendar,我经历了一个令人沮丧的问题,我整晚都在处理这个问题。长话短说,如果纽约有人在下午2点创建活动,我希望该活动显示为晚上8点,供在欧洲查看日历的人观看(比方说,他们提前了6个小时) 我的完整日历配置如下所示: function renderSchedule(timezone) { var userSchedule = $('#user-schedule').fullCalendar({ header: { left: 'pre
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
}
mysite.com / my_page / load_schedule ? start = 2014 - 02 - 02 & end = 2014 - 02 - 09 & timezone = Europe % 2FChisinau & _ = 1391660233815
我有更多的选择,但这些应该足以解决这个问题。正如文档中提到的,fullcalendar通过GET传递URL,如下所示:
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
}
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
函数。因此,即使我位于美国东海岸,我也希望能够通过欧洲时区,并相应地渲染日历
另外,我应该指出,我正在使用beta版(2.0),它允许传递时区字符串(我正在这样做),并通过
你知道我做错了什么吗?我在演示中就可以让它工作了。我更新了您的日期格式,以包含用于偏移的冒号。此外,fullcalendar 1.6.4的最新稳定版本没有时区变量
$('#calendar').fullCalendar({
editable: true,
header : {
left:"prev,next",
center:"title",
right:"month,basicWeek,agendaWeek,basicDay,agendaDay"
},
ignoreTimezone: false,
events: [
{
start: "2014-02-06T14:10:00+02:00",
end:"2014-02-06T15:00:00+02:00",
title:"My title",
allDay: false
}
});
如果您使用的是beta版本2.0,那么您需要删除ignoreTimezone,因为这不再是一个参数
最新答复:
事实证明,问题在于后端如何处理日期。下面是我如何解决这个问题的
date_default_timezone_set($timezone);
$timestampStart = strtotime($mysql_start_date);
$timestampEnd = strtotime($mysql_end_date);
$local_time_start = $timestampStart + date('Z');
$local_time_end = $timestampEnd + date('Z');
$local_date_start = date('Y-m-d H:i:s', $local_time_start);
$local_date_end = date('Y-m-d H:i:s', $local_time_end);
$event['start'] = $local_date_start;
$event['end'] = $local_date_end;
我使用的是支持时区并使用moment.js的beta版本,在这种情况下,ignoreTimezone默认设置为false,并且您的时区参数应该是“timezoneParam”vs“timezone”。您在中看过演示吗?我认为您无法更改ignoreTimezone的值,因为它在2.0中不存在。看一看。嗨,谢谢你的跟进,我真的很感激。我确实看到了那个演示,但是在那个演示中他们使用了“timezone”参数,你仍然建议我将其更改为
timezoneParam
?我只是仔细检查了文档,并且timezoneParam仅在事件中指定。时区参数应该有效。您是否尝试将“:”添加到偏移中?