wp_maybe_decline_date() WP 4.4.0

Схиляє або змінює місяць у переданому рядку дати. Наприклад для російської: 15 Май > 15 мая.

Працює тільки для мов, у яких місяці в даті змінюються (схиляються). Схиляється місяць у дати чи ні, визначається наступним рядком перекладу:

'on' === _x( 'off', 'decline months names: on or off' )

Функція перевіряє передану дату і якщо вона формату: число слово ...( 15 Май, 15 май 2019 год), то дата буде оброблена, і в ній назву місяця буде замінено на назву у батьківському відмінку. Так, наприклад, 15 Май 2019перетворитися на 15 мая 2019.

Функція нічого не робить (повертає передану дату), якщо місяці у мові не змінюються (не схиляються).

За умовчанням WP функція повішена на хук date_i18n :

add_filter( 'date_i18n', 'wp_maybe_decline_date' );

Функція звертається до глобальної змінної $wp_locale , що містить об’єкт класу WP_Locale , який має властивості: month і month_genitive . Вона робить перетворення на основі цих якостей (без урахування регістру букв):

[month] => Array (
	[01] => Січень
	[02] => Лютий
	[03] => Березень
	[04] => Квітень
	[05] => Травень
	[06] => Червень
	[07] => Липень
	[08] => Серпень
	[09] => Вересень
	[10] => Жовтень
	[11] => Листопад
	[12] => Грудень
)

[month_genitive] => Array (
	[01] => січня
	[02] => лютого
	[03] => березня
	[04] => квітня
	[05] => травня
	[06] => червня
	[07] => липня
	[08] => серпня
	[09] => вересня
	[10] => жовтня
	[11] => листопада
	[12] => грудня
)

Працює на основі:
WP_Locale()
1 раз – 0.000227 сек
(швидко) | 50000 разів – 0.51 сек
(дуже швидко) |
PHP 7.2.16, WP 5.2

Хуків немає.

Повертає

Строку. Змінена дата, якщо мова сайту передбачає відмінювання дати та передану дату (без змін) в іншому випадку.

Використання

wp_maybe_decline_date( $date );
$date
(рядок) (обов’язковий)
Відформатований час.

Приклади

0

#1 Приклади конвертації дати

Дата має відповідний формат і перетворюється (змінюється, схиляється):

echo wp_maybe_decline_date( '15 Травня 2019' ); //> 15 травня 2019

Дата має відповідний формат, але місяць у ній написаний вже правильно — функція нічого не змінює, хоча робить ті самі операції з пошуку заміни.

echo wp_maybe_decline_date( '15 Травня 2019' ); //> 15 Травня 2019
echo wp_maybe_decline_date('15 травня 2019'); //> 15 травня 2019

Дата має невідповідний формат, функція просто її повертає без будь-яких спроб щось змінити.

echo wp_maybe_decline_date( 'Травень 2019 року'); //> Травень 2019 року

нотатки

  • Global. WP_Locale. $wp_locale WordPress date and time locale object.

список змін

З версії 4.4.0Введено.
З версії 5.4.0The $format parameter був added.

Код wp_maybe_decline_date() WP 6.0.2

function wp_maybe_decline_date( $date, $format = '' ) {
	global $wp_locale;

	// i18n функцій не існує в режимі SHORTINIT.
	if ( ! function_exists( '_x' ) ) {
		return $date;
	}

	/*
	 * translators: If months in your language require a genitive case,
	 * translate this to 'on'. Do no translate в вашу 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, що випливає з month name)
		 * and decline the month.
		 */
		if ($format) {
			$decline = preg_match( '#[dj].? F#', $format );
		} else {
			// Якщо формат не є пропущеним, намагається отримати це від терміну часу.
			$decline = preg_match( '#bd{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' або 'F j' (month name, що випливає з днем ​​з можливим ordinal suffix)
		 * and change it to declined 'j F'.
		 */
		if ($format) {
			$decline = preg_match('#F[dj]#', $format);
		} else {
			// Якщо формат не є пропущеним, намагається отримати це від терміну часу.
			$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;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *