65 lines
1.6 KiB
PHP
65 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace Illuminate\Support;
|
|
|
|
use DateInterval;
|
|
use DateTimeInterface;
|
|
|
|
trait InteractsWithTime
|
|
{
|
|
/**
|
|
* Get the number of seconds until the given DateTime.
|
|
*
|
|
* @param \DateTimeInterface|\DateInterval|int $delay
|
|
* @return int
|
|
*/
|
|
protected function secondsUntil($delay)
|
|
{
|
|
$delay = $this->parseDateInterval($delay);
|
|
|
|
return $delay instanceof DateTimeInterface
|
|
? max(0, $delay->getTimestamp() - $this->currentTime())
|
|
: (int) $delay;
|
|
}
|
|
|
|
/**
|
|
* Get the "available at" UNIX timestamp.
|
|
*
|
|
* @param \DateTimeInterface|\DateInterval|int $delay
|
|
* @return int
|
|
*/
|
|
protected function availableAt($delay = 0)
|
|
{
|
|
$delay = $this->parseDateInterval($delay);
|
|
|
|
return $delay instanceof DateTimeInterface
|
|
? $delay->getTimestamp()
|
|
: Carbon::now()->addRealSeconds($delay)->getTimestamp();
|
|
}
|
|
|
|
/**
|
|
* If the given value is an interval, convert it to a DateTime instance.
|
|
*
|
|
* @param \DateTimeInterface|\DateInterval|int $delay
|
|
* @return \DateTimeInterface|int
|
|
*/
|
|
protected function parseDateInterval($delay)
|
|
{
|
|
if ($delay instanceof DateInterval) {
|
|
$delay = Carbon::now()->add($delay);
|
|
}
|
|
|
|
return $delay;
|
|
}
|
|
|
|
/**
|
|
* Get the current system time as a UNIX timestamp.
|
|
*
|
|
* @return int
|
|
*/
|
|
protected function currentTime()
|
|
{
|
|
return Carbon::now()->getTimestamp();
|
|
}
|
|
}
|