gpt4 book ai didi

javascript - FullCalendar 时区不在客户端修改时间

转载 作者:搜寻专家 更新时间:2023-10-31 21:35:17 24 4
gpt4 key购买 nike

我遇到了一个令人沮丧的问题,我整夜都在努力解决这个问题。长话短说,如果纽约的某个人在下午 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 使用时刻

知道我在这里做错了什么吗?

最佳答案

我能够通过演示让它工作。我更新了您的日期格式以包含偏移量的冒号。此外,最新的 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
}
});

如果您使用的是测试版 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;

关于javascript - FullCalendar 时区不在客户端修改时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21594825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com