示例#1
0
 function testGetDateTimeCached()
 {
     $tz = new \DateTimeZone('Europe/Amsterdam');
     $dt = new \DateTime('1985-07-04 01:30:00', $tz);
     $dt->setTimeZone($tz);
     $elem = new DateTime('DTSTART');
     $elem->setDateTime($dt);
     $this->assertEquals($elem->getDateTime(), $dt);
 }
示例#2
0
 /**
  * Parses the internal data structure to figure out what the current date
  * and time is.
  *
  * The returned array contains two elements:
  *   1. A 'DateType' constant (as defined on this class), or null.
  *   2. A DateTime object (or null)
  *
  * @param string|null $propertyValue The string to parse (yymmdd or
  *                                   ymmddThhmmss, etc..)
  * @param \Sabre\VObject\Property|null $property The instance of the
  *                                              property we're parsing.
  * @return array
  */
 public static function parseData($propertyValue, VObject\Property $property = null)
 {
     if (is_null($propertyValue)) {
         return array(null, null);
     }
     $date = '(?P<year>[1-2][0-9]{3})(?P<month>[0-1][0-9])(?P<date>[0-3][0-9])';
     $time = '(?P<hour>[0-2][0-9])(?P<minute>[0-5][0-9])(?P<second>[0-5][0-9])';
     $regex = "/^{$date}(T{$time}(?P<isutc>Z)?)?\$/";
     if (!preg_match($regex, $propertyValue, $matches)) {
         throw new \InvalidArgumentException($propertyValue . ' is not a valid \\DateTime or Date string');
     }
     if (!isset($matches['hour'])) {
         // Date-only
         return array(self::DATE, new \DateTime($matches['year'] . '-' . $matches['month'] . '-' . $matches['date'] . ' 00:00:00', new \DateTimeZone('UTC')));
     }
     $dateStr = $matches['year'] . '-' . $matches['month'] . '-' . $matches['date'] . ' ' . $matches['hour'] . ':' . $matches['minute'] . ':' . $matches['second'];
     if (isset($matches['isutc'])) {
         $dt = new \DateTime($dateStr, new \DateTimeZone('UTC'));
         $dt->setTimeZone(new \DateTimeZone('UTC'));
         return array(self::UTC, $dt);
     }
     // Finding the timezone.
     $tzid = $property['TZID'];
     if (!$tzid) {
         // This was a floating time string. This implies we use the
         // timezone from date_default_timezone_set / date.timezone ini
         // setting.
         return array(self::LOCAL, new \DateTime($dateStr));
     }
     // To look up the timezone, we must first find the VCALENDAR component.
     $root = $property;
     while ($root->parent) {
         $root = $root->parent;
     }
     if ($root->name === 'VCALENDAR') {
         $tz = VObject\TimeZoneUtil::getTimeZone((string) $tzid, $root);
     } else {
         $tz = VObject\TimeZoneUtil::getTimeZone((string) $tzid);
     }
     $dt = new \DateTime($dateStr, $tz);
     $dt->setTimeZone($tz);
     return array(self::LOCALTZ, $dt);
 }