加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – fullCalendar夏令时错误

发布时间:2020-12-13 16:43:58 所属栏目:PHP教程 来源:网络整理
导读:我有一个使用基于jQuery的fullCalendar构建的应用程序 ? http://arshaw.com/fullcalendar/ 我的日历事件由输出JSON的Ajax调用加载,它被配置为将星期一作为一周的第一天,默认视图为星期. 它一直工作正常,但我注意到如果我前往第13周(3月26日开始),事件没有正
我有一个使用基于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当前不支持.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读