Automattic\WooCommerce\Internal\Admin\Settings

SettingsUISchema::canonicalize_datetime │ private static │ WC 1.0

Canonicalize a store-local or already-qualified datetime.

Method of the class: SettingsUISchema{}

No Hooks.

Returns

string|null.

Usage

$result = SettingsUISchema::canonicalize_datetime( $value, $field_id ): ?string;
$value(mixed) (required)
Candidate value.
$field_id(string) (required)
Field id.

SettingsUISchema::canonicalize_datetime() code WC 11.2.1

private static function canonicalize_datetime( $value, string $field_id ): ?string {
	if ( null === $value || ( is_string( $value ) && '' === trim( $value ) ) ) {
		return null;
	}

	if ( ! is_string( $value ) ) {
		throw self::invalid_schema( sprintf( 'Field "%s" datetime value must be a string or null.', $field_id ) );
	}

	$value = trim( $value );
	// Seconds occupy index 16 (`:ss`) for both local and qualified values.
	$has_seconds = isset( $value[16] ) && ':' === $value[16];
	$wall_format = $has_seconds ? 'Y-m-d\TH:i:s' : 'Y-m-d\TH:i';

	if ( preg_match( self::LOCAL_DATETIME_PATTERN, $value ) ) {
		$format   = '!' . $wall_format;
		$datetime = \DateTimeImmutable::createFromFormat( $format, $value, wp_timezone() );
	} elseif ( preg_match( self::QUALIFIED_DATETIME_PATTERN, $value ) ) {
		$format   = '!' . $wall_format . 'P';
		$datetime = \DateTimeImmutable::createFromFormat( $format, $value );
	} else {
		throw self::invalid_schema( sprintf( 'Field "%s" datetime value is malformed.', $field_id ) );
	}

	$errors = \DateTimeImmutable::getLastErrors();
	if ( false === $datetime || ( is_array( $errors ) && ( 0 < $errors['warning_count'] || 0 < $errors['error_count'] ) ) ) {
		throw self::invalid_schema( sprintf( 'Field "%s" datetime value is malformed.', $field_id ) );
	}

	return $datetime->format( 'Y-m-d\TH:i:sP' );
}