Php将非标准时区转换为标准时区

Php将非标准时区转换为标准时区,php,timezone,Php,Timezone,我对ics内容有一个问题,其中Vtimezone、TZID显示为非标准时区,需要将其转换为标准时区。PHP DateTimeZone()函数不转换/处理非标准时区 ICS内容看起来像 BEGIN:VCALENDAR PRODID: VERSION:2.0 METHOD:REQUEST BEGIN:VTIMEZONE TZID:Eastern BEGIN:STANDARD DTSTART:20001105T020000 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU

我对ics内容有一个问题,其中Vtimezone、TZID显示为非标准时区,需要将其转换为标准时区。PHP DateTimeZone()函数不转换/处理非标准时区

ICS内容看起来像

BEGIN:VCALENDAR
PRODID:
VERSION:2.0
METHOD:REQUEST

BEGIN:VTIMEZONE
TZID:Eastern
BEGIN:STANDARD
DTSTART:20001105T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:Standard Time
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20000312T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:Daylight Savings Time
END:DAYLIGHT
END:VTIMEZONE

有谁能帮我找到一个解决方案吗……

解决这个问题的好方法可能是:

  • 将Vtimezone TZID转换为Unix时间戳
  • Unix时间(也称为POSIX时间或历元时间)是一种用于描述时间瞬间的系统,定义为自1970年1月1日星期四协调世界时(UTC)00:00:00以来经过的秒数

    从该TZID时区获得的时间戳的格式如下: 1459408447

  • 将该时间戳转换为您需要的时区,对美国/丹佛执行类似于以下示例的操作:

    $timezone = new DateTimeZone('America/Denver');
    $timestamp = 1459408447;
    
    $dt = new DateTime( $timezone );    
    $dt->setTimestamp($timestamp);
    
    echo $dt->format('Y-m-d H:i:s (e)');
    

  • 该方法还将从ICS内容中获取时间戳整数。