IPRosClock is a PHP library that implements Psr\Clock\ClockInterface
and retrieves the current time using external time or geo-IP providers such as ipapi.co.
- PSR-compatible ClockInterface
- Get current time based on IP address
- Easily switchable external providers
- Strict IP validation
- Extendable provider abstraction
composer require krepysh-spec/ipros
You can use a built-in provider like IpApiProvider, or create your own by extending AbstractProvider.
use KrepyshSpec\IPros\IPRosClock;
use KrepyshSpec\IPros\Providers\IpApi\IpApiProvider;
$clock = new IPRosClock(
new IpApiProvider()
);
$now = $clock->now();
echo $now->format('Y-m-d H:i:s');
$clock->setIp('127.0.0.1');
echo $clock->now()->format(DateTimeInterface::RFC3339);
You can pass any custom options required by your provider using setOptions():
$clock->setOptions([
'ip' => '8.8.8.8',
'apiKey' => 'your_api_key_here',
'lang' => 'en'
]);
echo $clock->now()->format('c');
You can define a custom provider like this:
use KrepyshSpec\IPros\AbstractProvider;
use KrepyshSpec\IPros\Enums\ProviderRequestMethodEnum;
use DateTimeImmutable;
class MyProvider extends AbstractProvider
{
protected function getApiUrl(): string
{
return 'https://my-api.com/time';
}
protected function getRequestMethod(): ProviderRequestMethodEnum
{
return ProviderRequestMethodEnum::GET;
}
protected function prepareApiUrl(string $apiUrl, array $data): ?string
{
return $apiUrl . '?ip=' . ($data['ip'] ?? '');
}
protected function prepareResponse(array $response): DateTimeImmutable
{
return new DateTimeImmutable($response['dateTime']);
}
}
- PHP 8.1+
- Composer