/**
  * @param bool $withTime
  *
  * @return string
  */
 public function calendar($withTime = true)
 {
     $momentNow = new Moment('now', $this->getTimezoneString());
     $momentFromVo = $this->cloning()->startOf('day')->from($momentNow->startOf('day'));
     $diff = $momentFromVo->getDays();
     // handle time string
     $renderedTimeString = MomentLocale::renderLocaleString(array('calendar', 'withTime'), array($this));
     $addTime = false;
     // apply cases
     if ($diff > 7) {
         $localeKeys = array('calendar', 'default');
     } elseif ($diff > 1) {
         $localeKeys = array('calendar', 'lastWeek');
         $addTime = true;
     } elseif ($diff > 0) {
         $localeKeys = array('calendar', 'lastDay');
         $addTime = true;
     } elseif ($diff == 0) {
         $localeKeys = array('calendar', 'sameDay');
         $addTime = true;
     } elseif ($diff == -1) {
         $localeKeys = array('calendar', 'nextDay');
         $addTime = true;
     } elseif ($diff > -7) {
         $localeKeys = array('calendar', 'sameElse');
         $addTime = true;
     } else {
         $localeKeys = array('calendar', 'default');
     }
     // render format
     $format = MomentLocale::renderLocaleString($localeKeys, array($this));
     // add time if valid
     if ($addTime && $withTime === true) {
         $format .= ' ' . $renderedTimeString;
     }
     return $this->format($format);
 }