/** * @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); }