wp_maybe_decline_date( string $date, string $format = '' ): string

Determines if the date should be declined.

Description

If the locale specifies that month names require a genitive case in certain formats (like ‘j F Y’), the month name will be replaced with a correct form.

Parameters

$datestringrequired
Formatted date string.
$formatstringoptional
Date format to check.

Default:''

Return

string The date, declined if locale specifies it.

Source

function wp_maybe_decline_date( $date, $format = '' ) {	global $wp_locale;	// i18n functions are not available in SHORTINIT mode.	if ( ! function_exists( '_x' ) ) {	return $date;	}	/* * translators: If months in your language require a genitive case, * translate this to 'on'. Do not translate into your own language. */	if ( 'on' === _x( 'off', 'decline months names: on or off' ) ) {	$months = $wp_locale->month;	$months_genitive = $wp_locale->month_genitive;	/* * Match a format like 'j F Y' or 'j. F' (day of the month, followed by month name) * and decline the month. */	if ( $format ) {	$decline = preg_match( '#[dj]\.? F#', $format );	} else {	// If the format is not passed, try to guess it from the date string.	$decline = preg_match( '#\b\d{1,2}\.? [^\d ]+\b#u', $date );	}	if ( $decline ) {	foreach ( $months as $key => $month ) {	$months[ $key ] = '# ' . preg_quote( $month, '#' ) . '\b#u';	}	foreach ( $months_genitive as $key => $month ) {	$months_genitive[ $key ] = ' ' . $month;	}	$date = preg_replace( $months, $months_genitive, $date );	}	/* * Match a format like 'F jS' or 'F j' (month name, followed by day with an optional ordinal suffix) * and change it to declined 'j F'. */	if ( $format ) {	$decline = preg_match( '#F [dj]#', $format );	} else {	// If the format is not passed, try to guess it from the date string.	$decline = preg_match( '#\b[^\d ]+ \d{1,2}(st|nd|rd|th)?\b#u', trim( $date ) );	}	if ( $decline ) {	foreach ( $months as $key => $month ) {	$months[ $key ] = '#\b' . preg_quote( $month, '#' ) . ' (\d{1,2})(st|nd|rd|th)?([-–]\d{1,2})?(st|nd|rd|th)?\b#u';	}	foreach ( $months_genitive as $key => $month ) {	$months_genitive[ $key ] = '$1$3 ' . $month;	}	$date = preg_replace( $months, $months_genitive, $date );	}	}	// Used for locale-specific rules.	$locale = get_locale();	if ( 'ca' === $locale ) {	// " de abril| de agost| de octubre..." -> " d'abril| d'agost| d'octubre..."	$date = preg_replace( '# de ([ao])#i', " d'\\1", $date );	}	return $date; } 

Changelog

VersionDescription
5.4.0The $format parameter was added.
4.4.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.