微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – fullCalendar夏令时错误

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

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

它一直工作正常,但我注意到如果我前往第13周(3月26日开始),事件没有正确加载.我马上想到这必须与3月25日发生的夏令时变化有关.

当我使用下一个/上一个按钮上的点击时,日历使用自动生成的开始和结束时间进行ajax调用,我在后台PHP脚本采用开始日期计算周数no并调用我的数据库中的那一周的所有事件.

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

?start=1332115200&end=1332716400&_=1331237729591

PHP脚本:

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

哪个是第12周.

但是接下来的一周传递的变量是:

?start=1332716400&end=1333321200&_=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 – 因为计算机被设置为在该日期适用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当前不支持.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐