code: protected function parseOptionsToDateTime($options)
      {
          $time      = microtime(true);
          $micro     = sprintf("%06d", ($time - floor($time)) * 1000000);
          $this->now = new \DateTime(date('Y-m-d H:i:s.' . $micro, $time), new \DateTimeZone(date_default_timezone_get()));
          $scheduled = isset($options['scheduled']) ? Utils::createDateTime($options['scheduled']) : clone ($this->now);
  
          if (isset($options['delay'])) {
              $delay = Utils::createDateInterval($options['delay']);
              $scheduled->add($delay);
          }
  
          return $scheduled;
      }
docs: Parses options to a datetime object
  
  valid options keys:
  
  scheduled: the time when the job will be scheduled to run next
  - numeric string or integer - interpreted as a timestamp
  - string parserable by the DateTime object
  - DateTime instance
  delay: the delay before a job become available to be popped (defaults to 0 - no delay -)
  - numeric string or integer - interpreted as seconds
  - string parserable (ISO 8601 duration) by DateTimeInterval::__construct
  - string parserable (relative parts) by DateTimeInterval::createFromDateString
  - DateTimeInterval instance
  
  @see http://en.wikipedia.org/wiki/Iso8601#Durations
  @see http://www.php.net/manual/en/datetime.formats.relative.php
  
  @codeCoverageIgnore
  @param $options array
  @return \DateTime