1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- <?php
- /**
- * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
- namespace OCA\User_LDAP\Service;
- use DateTimeImmutable;
- use Exception;
- use InvalidArgumentException;
- class BirthdateParserService {
- /**
- * Try to parse the birthdate from LDAP.
- * Supports LDAP's generalized time syntax, YYYYMMDD and YYYY-MM-DD.
- *
- * @throws InvalidArgumentException If the format of then given date is unknown
- */
- public function parseBirthdate(string $value): DateTimeImmutable {
- // Minimum LDAP generalized date is "1994121610Z" with 11 chars
- // While maximum other format is "1994-12-16" with 10 chars
- if (strlen($value) > strlen('YYYY-MM-DD')) {
- // Probably LDAP generalized time syntax
- $value = substr($value, 0, 8);
- }
- // Should be either YYYYMMDD or YYYY-MM-DD
- if (!preg_match('/^(\d{8}|\d{4}-\d{2}-\d{2})$/', $value)) {
- throw new InvalidArgumentException("Unknown date format: $value");
- }
- try {
- return new DateTimeImmutable($value);
- } catch (Exception $e) {
- throw new InvalidArgumentException(
- "Unknown date format: $value",
- 0,
- $e,
- );
- }
- }
- }
|