Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的ISO日期时间_Php_Datetime_Timezone_Icalendar_Rfc5545 - Fatal编程技术网

PHP中的ISO日期时间

PHP中的ISO日期时间,php,datetime,timezone,icalendar,rfc5545,Php,Datetime,Timezone,Icalendar,Rfc5545,我有一个从web日历ICS文件解析的ISO日期时间格式。我已经在谷歌和雅虎创建了日历事件。在谷歌,我创建了时间为11:00到11:30的IST。 在雅虎,我创建了时间为11:30到11:45的IST 我已收到这两个事件的ICS文件。我的问题是ICS文件中的事件开始时间和结束时间 谷歌开始时间-20140218T060000Z提供GMT时间 雅虎开始时间-20140218T113000Z提供当地时间 如何检查ISO datetime中的时区是否为GMT,如果不是,如何将其转换为GMT?请帮助我实现

我有一个从web日历ICS文件解析的ISO日期时间格式。我已经在谷歌和雅虎创建了日历事件。在谷歌,我创建了时间为11:00到11:30的IST。 在雅虎,我创建了时间为11:30到11:45的IST

我已收到这两个事件的ICS文件。我的问题是ICS文件中的事件开始时间和结束时间

谷歌开始时间-20140218T060000Z提供GMT时间

雅虎开始时间-20140218T113000Z提供当地时间

如何检查ISO datetime中的时区是否为GMT,如果不是,如何将其转换为GMT?请帮助我实现这一目标。提前感谢。

您可以在php中使用date和strotime函数

参考资料:


在可以使用的ical文件中应该有一个时区声明

将其放置在DTSTART上,例如:

DTSTART;TZID=America/New_York:19980119T020000
但是ical并不是一门非常精确的科学,似乎每个人使用它的方式都不一样。我见过这样的时区声明:

X-WR-TIMEZONE:Europe/Berlin
在ical文件中只显示一次

创建DateTime对象后,可以使用DateTime::setTimezone对其进行设置。示例来自:


正如Gerald所指出的,区别来自这样一个事实:事件的DTSTART属性和DTEND属性是根据显式引用的,或者是通过X-WR-TIMEZONE隐式引用的

在第一种情况下,您必须处理VTIMEZONE组件。你需要一个

在第二种情况下,您必须参考,并且可能需要使用而不是默认的php


但是,您可能应该阅读J.Dunnell的这篇文章,了解在开始这段旅程之前处理X-WR时区可能存在的陷阱…

这是不可能分辨出来的,因为根据字符串表示法,这两个时区都是Zulu,又称GMT。@Jack SO提到这些日期已被解析。
X-WR-TIMEZONE:Europe/Berlin
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";