Version 5.0.0 beta 1
This commit is contained in:
1 parent
25ddeb65d6
commit
15c7beabc5
6736 files changed
+627902
-497943
No files matched your search
+103
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pdp\Storage;
|
||||
|
||||
use DateInterval;
|
||||
use DateTimeImmutable;
|
||||
use DateTimeInterface;
|
||||
use InvalidArgumentException;
|
||||
use Stringable;
|
||||
use Throwable;
|
||||
use function filter_var;
|
||||
use const FILTER_VALIDATE_INT;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class TimeToLive
|
||||
{
|
||||
public static function fromDurationString(string $duration): DateInterval
|
||||
{
|
||||
try {
|
||||
set_error_handler(fn () => true);
|
||||
$interval = DateInterval::createFromDateString($duration);
|
||||
restore_error_handler();
|
||||
if (!$interval instanceof DateInterval) {
|
||||
throw new InvalidArgumentException(
|
||||
'The ttl value "'.$duration.'" can not be parsable by `DateInterval::createFromDateString`.'
|
||||
);
|
||||
}
|
||||
|
||||
} catch (Throwable $exception) {
|
||||
if (!$exception instanceof InvalidArgumentException) {
|
||||
throw new InvalidArgumentException(
|
||||
'The ttl value "'.$duration.'" can not be parsable by `DateInterval::createFromDateString`.',
|
||||
0,
|
||||
$exception
|
||||
);
|
||||
}
|
||||
|
||||
throw $exception;
|
||||
}
|
||||
|
||||
return $interval;
|
||||
}
|
||||
|
||||
public static function until(DateTimeInterface $date): DateInterval
|
||||
{
|
||||
return (new DateTimeImmutable('NOW', $date->getTimezone()))->diff($date, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DateInterval relative to the current date and time.
|
||||
*
|
||||
* DEPRECATION WARNING! This method will be removed in the next major point release
|
||||
*
|
||||
* @deprecated 6.1.0 deprecated
|
||||
* @codeCoverageIgnore
|
||||
* @see TimeToLive::until
|
||||
*/
|
||||
public static function fromDateTimeInterface(DateTimeInterface $date): DateInterval
|
||||
{
|
||||
return self::until($date);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a DateInterval from string parsing.
|
||||
*
|
||||
* DEPRECATION WARNING! This method will be removed in the next major point release
|
||||
*
|
||||
* @deprecated 6.1.0 deprecated
|
||||
* @see TimeToLive::fromDurationString
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @throws InvalidArgumentException if the value can not be parsable
|
||||
*
|
||||
*/
|
||||
public static function fromScalar(Stringable|int|string $duration): DateInterval
|
||||
{
|
||||
return self::fromDurationString((string) $duration);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the input data into a DateInterval object or null.
|
||||
*
|
||||
* @throws InvalidArgumentException if the value can not be computed
|
||||
*/
|
||||
public static function convert(DateInterval|DateTimeInterface|Stringable|int|string|null $ttl): ?DateInterval
|
||||
{
|
||||
if ($ttl instanceof Stringable) {
|
||||
$ttl = (string) $ttl;
|
||||
}
|
||||
|
||||
return match (true) {
|
||||
$ttl instanceof DateInterval || null === $ttl => $ttl,
|
||||
$ttl instanceof DateTimeInterface => self::until($ttl),
|
||||
is_int($ttl) => self::fromDurationString($ttl.' seconds'),
|
||||
false !== ($seconds = filter_var($ttl, FILTER_VALIDATE_INT)) => self::fromDurationString($seconds.' seconds'),
|
||||
default => self::fromDurationString($ttl),
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user