krepysh-spec / ipros
PSR-20 compatible clock library that retrieves current time using external providers and IP geolocation.
v1.0.1
2025-05-09 21:30 UTC
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
- psr/clock: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.75
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^12.1
This package is auto-updated.
Last update: 2025-05-11 12:41:47 UTC
README
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.
🚀 Features
- PSR-compatible ClockInterface
- Get current time based on IP address
- Easily switchable external providers
- Strict IP validation
- Extendable provider abstraction
📦 Installation
composer require krepysh-spec/ipros
🧑💻 Usage
1. Create a Provider
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() );
2. Get Time for Current IP
$now = $clock->now(); echo $now->format('Y-m-d H:i:s');
3. Set Custom IP Address
$clock->setIp('127.0.0.1'); echo $clock->now()->format(DateTimeInterface::RFC3339);
4. Set Custom Options (e.g. API Key, Region)
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');
🧩 Providers
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']); } }
✅ Requirements
- PHP 8.1+
- Composer