Automattic\WooCommerce\Internal\Admin\Settings
SettingsUISchema::canonicalize_datetime
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() 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' );
}