/** * Try to parse a date interval specification string. * * @param string|DateInterval|PHPDateInterval|null $dateIntervalSpec [optional] A date interval specification, a * relative date and time string, a DateInterval or PHPDateInterval instance or null to create a zero * configuration. * @param mixed|null $default [optional] The default value returned on failure. * * @return string|mixed The parsed date interval specification or the default value on failure. */ public static function parse($dateIntervalSpec = null, $default = null) { // Return a zero specification if the specification is set to null if (empty($dateIntervalSpec)) { return DateIntervalSpec::createZero(); } // Parse strings if (is_string($dateIntervalSpec)) { // Check whether the string is already a valid specification if (static::isValid($dateIntervalSpec)) { return $dateIntervalSpec; } // Check whether the string has relative keywords if (DateTime::hasRelativeKeywords($dateIntervalSpec)) { try { // Try to parse the string as relative date and time $dateInterval = DateInterval::createFromDateString($dateIntervalSpec); // Get and return the date interval specification return $dateInterval->toSpecString(); } catch (Exception $ex) { } } } // Parse DateInterval objects if ($dateIntervalSpec instanceof DateInterval) { return $dateIntervalSpec->toSpecString(); } // Parse PHPDateInterval objects if ($dateIntervalSpec instanceof PHPDateInterval) { if (($spec = DateIntervalSpec::create($dateIntervalSpec->y, $dateIntervalSpec->m, null, $dateIntervalSpec->d, $dateIntervalSpec->h, $dateIntervalSpec->i, $dateIntervalSpec->s)) !== null) { return $spec; } } // Couldn't parse the string, return the default value return $default; }
/** * Get the difference in hours using a filter closure * * @param Closure $callback The callback function to call for each hour as filter. * @param DateTime|PHPDateTime|string|null $dateTime [optional] A DateTime or PHPDateTime instance, the date and * time as a string or null to use the now() date and time. * @param boolean $absolute Get the absolute of the difference. * * @return int|null The difference in hours. Null will be returned on failure. */ public function diffInHoursFiltered(Closure $callback, $dateTime = null, $absolute = true) { return $this->diffFiltered(DateInterval::createHour(), $callback, $dateTime, $absolute); }
/** * Formats the date interval into a string. * * @param string|null $format [optional] The format to use specified by PHPDateInterval::diff();, or null to return * the date interval specification. * * @return string The formatted date interval. * * @link http://php.net/manual/en/dateinterval.format.php */ public function format($format = null) { // Return the specification if the parameter is null if ($format === null) { return $this->toSpecString(); } // Get and return the date interval in proper format return parent::format($format); }
/** * Parse a date interval. A new instance may be created. * * This method allows better fluent syntax because it makes method chaining possible. * * @param DateInterval|PHPDateInterval|string|null $dateInterval [optional] A DateInterval or PHPDateInterval * instance, a date interval specification, or null to use a zero specification. * @param mixed|null $default [optional] The default value to be returned on failure. * * @return static|mixed A DateInterval instance, or the default value on failure. */ public static function parse($dateInterval, $default = null) { return ($result = DateInterval::parse($dateInterval)) === null ? $default : $result; }