fullCalendar夏令时错误



我有一个使用基于jQuery的fullCalendar构建的应用程序http://arshaw.com/fullcalendar/

我的日历事件由一个输出JSON的Ajax调用加载,它被配置为将星期一作为一周的第一天,默认视图为周。

它一直运行良好,但我注意到,如果我继续到第13周(从3月26日开始),活动将无法正常加载。我马上就想,这一定与3月25日发生的夏令时变化有关。

当我点击next/prev按钮时,日历会使用自动生成的开始和结束时间进行ajax调用,我在后台的php脚本会获取开始日期,计算周号,并调用数据库中该周的所有事件。

例如,在第12周传递以下变量:

start=1332115200&end=1332716400&amp_=1331237729591

PHP脚本:

$week_no = date('W', $_GET['start']);

结果是第12周。

然而,接下来的一周通过的变量是:

start=1332716400&end=1333321200&amp_=1331238038820

$week_no = date('W',$_GET['start']); == 12 // same as last week

Nn进一步检查

echo date("C",1332115200);    // == 2012-03-19T00:00:00+00:00
echo date("C",1332716400);    //2012-03-25T23:00:00+00:00 (1 hour short of being in week 13)

很明显,白天的变化造成了这个问题。

我的问题是,这是fullcalander的问题还是我的PHP逻辑的问题?

首先:我不知道你的代码和设置,所以我说的只是猜测。

如果两个系统都设置为UTC,就不会(应该)出现问题。在服务器设置为UTC的情况下,正确使用JavaScript函数date.getUTC*(fullCalendar不使用这些函数)也是如此。但我认为,实际上只有你的服务器被设置为UTC,而你的计算机被设置为"欧洲/伦敦"或类似的名称(现在看起来像UTC,因为冬天是UTC+0)。

这一切都会导致以下情况:fullCalendar尝试计算时间戳,例如2012年7月1日00:00:00-因为计算机设置在夏令时适用的时区(冬季为UTC+0,夏季为UTC+1->7月1号=UTC+1),您将获得该时刻的时间戳,即伦敦的7月1日00:00:00。因为他们的时间比UTC早一个小时,所以如果您将时间戳相对于UTC进行解释,则会得到23:00:00,也就是说,服务器会做什么。

解决方案可以简单如下:

<?php
date_default_timezone_set('Europe/London');

这样,如果相应的日期在冬季,则服务器应相对于UTC+0解释时间戳,如果在夏季,则相对于UTC+1解释时间戳。

然而,如果访客时区设置为不同的时区,例如"America/Loss_Angeles",则您的应用程序仍然会出错,无法按预期工作。最好的方法通常是在任何地方使用UTC时间戳,但fullCalendar目前不支持这种方式。

可能取决于时区,因为不同时区的夏令时日期不同。确保php.ini文件中设置的时区与您所在国家的时区相同。

还可以使用date_default_timezone_set函数设置时区。

下面是支持的时区列表
http://php.net/manual/en/timezones.php

同时检查。。。。http://arshaw.com/fullcalendar/docs/event_data/ignoreTimezone/

它也可能有助于

相关内容

  • 没有找到相关文章