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

使用PHP解析Google日历XML – 结束日期已过了一天

发布时间:2020-12-13 16:14:16 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试创建一个网页,并在主页上显示Google日历上的下三个活动.我一直在使用这个 PHP(http://james.cridland.net/code/google-calendar.html)来访问我的XML feed并将其格式化为HTML. 我遇到的问题是由于某种原因,新的一天从上午11点开始.例如,如果我的Goo
我正在尝试创建一个网页,并在主页上显示Google日历上的下三个活动.我一直在使用这个 PHP(http://james.cridland.net/code/google-calendar.html)来访问我的XML feed并将其格式化为HTML.

我遇到的问题是由于某种原因,新的一天从上午11点开始.例如,如果我的Google日历从12月20日上午10点开始,持续一个小时,我的PHP输出将显示一个事件,该事件从20日上午10点开始,到21日上午11点结束.否则它工作正常.

我已经在我的Google日历帐户上设置了本地(新西兰)时间,并使用date_default_timezone_set(“Pacific / Auckland”)在PHP中设置了时间.

计算结束日期的可怕线是

$gCalDateEnd = date($dateformat,strtotime($ns_gd->when->attributes()->endTime)+date("Z",strtotime($ns_gd->when->attributes()->endTime)));

其中$dateformat是一个具有日期格式的字符串.

Google Calendar XML提供了开始和结束时间

2011-12-22T10:00:00.000+13:00
2011-12-23T11:00:00.000+13:00

PHP计算时间表为2011年12月22日上午10点至2011年12月23日下午2点.

这是怎么回事?!?!

解决方法

这条线确实太可怕了:

$gCalDateEnd = date($dateformat,strtotime($ns_gd->when->attributes()->endTime)+
    date("Z",strtotime($ns_gd->when->attributes()->endTime)));

strtotime可以处理这种类型的ISO 8601日期就好了.这个代码片段可能是在假设strtotime取消时区并以UTC返回日期时间的情况下编写的,因此时区“校正”需要手动计算 – 这就是日期(“Z”,…)代表的含义(使用“Z”第二个参数 – 时间戳 – 实际上被忽略了).

因此,在您的示例中,您的日期会增加13个小时. 10:00 13:00 = 23:00(晚上11点)仍然在同一天,但是11:00 13:00 = 24:00(12点),实际上是新的一天00:00.

所以转换日期的正确方法是:

$gCalDateEnd = date($dateformat,strtotime($ns_gd->when->attributes()->endTime));

(编辑:李大同)

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

    推荐文章
      热点阅读