getOption( 'timecorrection' ) : false; $data = explode( '|', $tz, 3 ); // DateTime is mutable, keep track of possible changes $dateTime->hasLocalTimeCorrection = false; if ( $data[0] == 'ZoneInfo' ) { try { $userTZ = new DateTimeZone( $data[2] ); $dateTime->setTimezone( $userTZ ); $dateTime->hasLocalTimeCorrection = true; return $dateTime; } catch ( \Exception $e ) { // Unrecognized timezone, default to 'Offset' with the stored offset. $data[0] = 'Offset'; } } if ( $data[0] == 'System' || $tz == '' ) { # Global offset in minutes. $minDiff = self::$localTimeOffset; } elseif ( $data[0] == 'Offset' ) { $minDiff = intval( $data[1] ); } else { $data = explode( ':', $tz ); if ( count( $data ) == 2 ) { $data[0] = intval( $data[0] ); $data[1] = intval( $data[1] ); $minDiff = abs( $data[0] ) * 60 + $data[1]; if ( $data[0] < 0 ) { $minDiff = -$minDiff; } } else { $minDiff = intval( $data[0] ) * 60; } } # No difference ? if ( 0 == $minDiff ) { return $dateTime; } $dateInterval = new DateInterval( "PT" . abs( $minDiff ) . "M" ); if ( $minDiff > 0 ) { $dateTime->add( $dateInterval ); } else { $dateTime->sub( $dateInterval ); } $dateTime->hasLocalTimeCorrection = true; return $dateTime; } }