php – fullCalendar夏令时错误
我有一个使用基于jQuery的fullCalendar构建的应用程序
? http://arshaw.com/fullcalendar/ 我的日历事件由输出JSON的Ajax调用加载,它被配置为将星期一作为一周的第一天,默认视图为星期. 它一直工作正常,但我注意到如果我前往第13周(3月26日开始),事件没有正确加载.我马上想到这必须与3月25日发生的夏令时变化有关. 当我使用下一个/上一个按钮上的点击时,日历使用自动生成的开始和结束时间进行ajax调用,我在后台的PHP脚本采用开始日期计算周数no并调用我的数据库中的那一周的所有事件. 例如,在第12周,传递以下变量:
PHP脚本: $week_no = date('W',$_GET['start']); 哪个是第12周. 但是接下来的一周传递的变量是:
$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 – 因为计算机被设置为在该日期适用DST的时区(冬季为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 / Los_Angeles”,您的应用程序仍然搞砸了,无法按预期工作.最好的方法通常是在任何地方使用UTC时间戳,但fullCalendar当前不支持. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |