function __construct($string, \DateTime $now = null, $lang = 'en')
 {
     // initialize the translator
     DateTranslator::getInstance($lang);
     // set the now date
     if (is_null($now)) {
         $this->now = new \DateTime();
     } else {
         $this->now = $now;
     }
     // then try to determine which datetype we have here
     $success = preg_match(RelativeDateType1::getRegex(), $string, $match);
     if ($success === 1) {
         $this->datetype = new RelativeDateType1($match);
         return $this;
     }
     $success = preg_match(RelativeDateType2::getRegex(), $string, $match);
     if ($success === 1) {
         $this->datetype = new RelativeDateType2($match);
         return $this;
     }
     $success = preg_match(RelativeDateType3::getRegex(), $string, $match);
     if ($success === 1) {
         $this->datetype = new RelativeDateType3($match);
         return $this;
     }
     throw new \Exception('No DateType found.');
 }
 function __construct($data)
 {
     $day = intval($data[1]);
     if (is_integer($day)) {
         $this->day = $day;
     } else {
         throw new \BadMethodCallException(DateTranslator::getInstance()->translate('Tag wurde nicht angegeben oder ist falsch.'));
     }
 }
 function __construct($data)
 {
     $interval = intval($data[1]);
     if (is_integer($interval)) {
         $this->interval = $data[1];
     } else {
         throw new \BadMethodCallException("interval is wrong or missing");
     }
     switch ($data[2]) {
         case DateTranslator::getInstance()->translate('Tage'):
             $this->days_or_week = 0;
             break;
         case DateTranslator::getInstance()->translate('Wochen'):
             $this->days_or_week = 1;
             break;
         default:
             throw new \BadMethodCallException("days or weeks are missing");
     }
 }
 function __construct($data)
 {
     switch ($data[1]) {
         case DateTranslator::getInstance()->translate('Erster'):
             $this->ordinal = 0;
             break;
         case DateTranslator::getInstance()->translate('Zweiter'):
             $this->ordinal = 1;
             break;
         case DateTranslator::getInstance()->translate('Dritter'):
             $this->ordinal = 2;
             break;
         case DateTranslator::getInstance()->translate('Letzter'):
             $this->ordinal = 3;
             break;
         default:
             throw new \BadMethodCallException("Ordinal is wrong or missing");
     }
     switch ($data[2]) {
         case DateTranslator::getInstance()->translate('Montag'):
             $this->day = 0;
             break;
         case DateTranslator::getInstance()->translate('Dienstag'):
             $this->day = 1;
             break;
         case DateTranslator::getInstance()->translate('Mittwoch'):
             $this->day = 2;
             break;
         case DateTranslator::getInstance()->translate('Donnerstag'):
             $this->day = 3;
             break;
         case DateTranslator::getInstance()->translate('Freitag'):
             $this->day = 4;
             break;
         case DateTranslator::getInstance()->translate('Samstag'):
             $this->day = 5;
             break;
         case DateTranslator::getInstance()->translate('Sonntag'):
             $this->day = 6;
             break;
         default:
             throw new \BadMethodCallException("Day is wrong or missing");
     }
     switch ($data[3]) {
         case DateTranslator::getInstance()->translate('Monats'):
             $this->month_or_year = 0;
             break;
         case DateTranslator::getInstance()->translate('Jahres'):
             $this->month_or_year = 1;
             break;
         default:
             throw new \BadMethodCallException("month or year is wrong or missing");
     }
 }