bretterer/iso_duration_converter
Lightweight PHP helper to convert ISO 8601 duration strings (e.g., PT1H30M, P2DT3H) into usable values like seconds or formatted time. Handy for parsing API durations, validating inputs, and normalizing durations in Laravel or any PHP app.
PT1H30M to 5400 seconds for a timeout).Carbon and DateTime support ISO 8601 dates, but lacks native duration parsing. This package fills that gap without reinventing the wheel.IsoDurationConverter) with no complex setup. Can be drop-in for:
validate('timeout', 'iso_duration')).Duration::parse($input)->getTotalSeconds()).AuthorizesRequests or ValidatesRequests.toArray()/toJson().P1DT2H in a migrations table).P1Y2M3DT4H).Carbon or DateInterval could be extended, but this package offers simplicity.composer require + phpunit.)P1X)?DateInterval + custom logic suffice, or is this package’s API cleaner?spatie/iso-duration) with better support?Validator or custom rules.php artisan my:command --duration=PT1H).composer require bretterer/iso_duration_converter.use Bretterer\IsoDurationConverter\Duration;
$duration = Duration::parse('PT1H30M');
$seconds = $duration->getTotalSeconds(); // 5400
use Bretterer\IsoDurationConverter\Duration;
use Illuminate\Contracts\Validation\Rule;
class IsoDuration implements Rule {
public function passes($attribute, $value) {
try {
Duration::parse($value);
return true;
} catch (\Exception $e) {
return false;
}
}
}
public function rules() {
return ['timeout' => ['required', new IsoDuration]];
}
60 * 60 for 1 hour) with parsed values:
$timeout = Duration::parse($request->timeout)->getTotalSeconds();
php artisan optimize.P1DT2H) in DB, parse on retrieval.DurationTest.php).var_dump(Duration::parse($input))).DateInterval).| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Malformed ISO input | Validation fails silently | Add try-catch or custom error messages. |
| PHP version incompatibility | Parse errors | Polyfill or fork. |
| Package abandonment | No future updates | Fork and maintain. |
| Edge-case ISO formats | Incorrect parsing | Extend package or use DateInterval. |
composer.json + write 2–3 usage examples.P0D, PT0S, invalid inputs).PT1H → 3600).How can I help you explore Laravel packages today?