Ticket #48934: 48934.diff
File 48934.diff, 4.8 KB (added by , 5 years ago) |
---|
-
src/wp-includes/functions.php
286 286 } 287 287 288 288 $date = $datetime->format( $new_format ); 289 $date = wp_maybe_decline_date( $date );289 $date = wp_maybe_decline_date( $date, $format ); 290 290 } 291 291 292 292 /** … … 312 312 * formats (like 'j F Y'), the month name will be replaced with a correct form. 313 313 * 314 314 * @since 4.4.0 315 * @since 5.4.0 The `$format` parameter was added. 315 316 * 316 317 * @global WP_Locale $wp_locale WordPress date and time locale object. 317 318 * 318 * @param string $date Formatted date string. 319 * @param string $date Formatted date string. 320 * @param string $format Date format to check. 319 321 * @return string The date, declined if locale specifies it. 320 322 */ 321 function wp_maybe_decline_date( $date ) {323 function wp_maybe_decline_date( $date, $format ) { 322 324 global $wp_locale; 323 325 324 326 // i18n functions are not available in SHORTINIT mode … … 339 341 * Match a format like 'j F Y' or 'j. F' (day of the month, followed by month name) 340 342 * and decline the month. 341 343 */ 342 if ( preg_match( '# \b\d{1,2}\.? [^\d ]+\b#u', $date) ) {344 if ( preg_match( '#[dj]\.? F#', $format ) ) { 343 345 foreach ( $months as $key => $month ) { 344 346 $months[ $key ] = '# ' . preg_quote( $month, '#' ) . '\b#u'; 345 347 } … … 355 357 * Match a format like 'F jS' or 'F j' (month name, followed by day with an optional ordinal suffix) 356 358 * and change it to declined 'j F'. 357 359 */ 358 if ( preg_match( '# \b[^\d ]+ \d{1,2}(st|nd|rd|th)?\b#u', trim( $date )) ) {360 if ( preg_match( '#F [dj]#', $format ) ) { 359 361 foreach ( $months as $key => $month ) { 360 362 $months[ $key ] = '#\b' . preg_quote( $month, '#' ) . ' (\d{1,2})(st|nd|rd|th)?\b#u'; 361 363 } -
tests/phpunit/tests/functions/maybeDeclineDate.php
41 41 * @ticket 48606 42 42 * @dataProvider data_wp_maybe_decline_date 43 43 */ 44 public function test_wp_maybe_decline_date( $test_locale, $ input, $output ) {44 public function test_wp_maybe_decline_date( $test_locale, $format, $input, $output ) { 45 45 global $locale, $wp_locale; 46 46 47 47 add_filter( 'gettext_with_context', array( $this, 'filter__enable_months_names_declension' ), 10, 3 ); … … 52 52 $wp_locale->month = $month_names['month']; 53 53 $wp_locale->month_genitive = $month_names['month_genitive']; 54 54 55 $declined_date = wp_maybe_decline_date( $input );55 $declined_date = wp_maybe_decline_date( $input, $format ); 56 56 57 57 remove_filter( 'gettext_with_context', array( $this, 'filter__enable_months_names_declension' ), 10 ); 58 58 … … 69 69 70 70 public function data_wp_maybe_decline_date() { 71 71 return array( 72 array( 'ru_RU', '21 Июнь', '21 июня' ), 73 array( 'ru_RU', '1 Январь 2016', '1 января 2016' ), 74 array( 'ru_RU', 'Январь 1st 2016', '1 января 2016' ), 75 array( 'ru_RU', 'Январь 1 2016', '1 января 2016' ), 76 array( 'ru_RU', 'Январь 1 16', '1 января 16' ), 77 array( 'ru_RU', 'Суббота, 19 Январь 2019 10:50', 'Суббота, 19 января 2019 10:50' ), 78 array( 'pl_PL', '1 Styczeń', '1 stycznia' ), 79 array( 'hr', '1. Siječanj', '1. siječnja' ), 80 array( 'ca', '1 de abril', "1 d'abril" ), 81 array( 'cs_CZ', '1. Červen', '1. června' ), 82 array( 'cs_CZ', '1. Červenec', '1. července' ), 83 array( 'it_IT', 'Lundeì 11 Novembre 2019', 'Lundeì 11 Novembre 2019' ), 84 array( 'el', 'Σάββατο, 19 Ιανουάριος 2019 10:50', 'Σάββατο, 19 Ιανουαρίου 2019 10:50' ), 72 array( 'ru_RU', 'j F', '21 Июнь', '21 июня' ), 73 array( 'ru_RU', 'j F Y', '1 Январь 2016', '1 января 2016' ), 74 array( 'ru_RU', 'F jS Y', 'Январь 1st 2016', '1 января 2016' ), 75 array( 'ru_RU', 'F j Y', 'Январь 1 2016', '1 января 2016' ), 76 array( 'ru_RU', 'F j y', 'Январь 1 16', '1 января 16' ), 77 array( 'ru_RU', 'l, d F Y H:i', 'Суббота, 19 Январь 2019 10:50', 'Суббота, 19 января 2019 10:50' ), 78 array( 'ru_RU', 'F y', 'Май 19', 'Май 19' ), 79 array( 'pl_PL', 'j F', '1 Styczeń', '1 stycznia' ), 80 array( 'hr', 'j. F', '1. Siječanj', '1. siječnja' ), 81 array( 'ca', 'j F', '1 de abril', "1 d'abril" ), 82 array( 'cs_CZ', 'j. F', '1. Červen', '1. června' ), 83 array( 'cs_CZ', 'j. F', '1. Červenec', '1. července' ), 84 array( 'it_IT', 'l j F Y', 'Lundeì 11 Novembre 2019', 'Lundeì 11 Novembre 2019' ), 85 array( 'el', 'l, d F Y H:i', 'Σάββατο, 19 Ιανουάριος 2019 10:50', 'Σάββατο, 19 Ιανουαρίου 2019 10:50' ), 85 86 ); 86 87 } 87 88