Ticket #48934: 48934.2.diff
File 48934.2.diff, 5.3 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 Optional. Date format to check. Default empty string. 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 ( $format ) { 345 $decline = preg_match( '#[dj]\.? F#', $format ); 346 } else { 347 // If the format is not passed, try to guess it from the date string. 348 $decline = preg_match( '#\b\d{1,2}\.? [^\d ]+\b#u', $date ); 349 } 350 351 if ( $decline ) { 343 352 foreach ( $months as $key => $month ) { 344 353 $months[ $key ] = '# ' . preg_quote( $month, '#' ) . '\b#u'; 345 354 } … … 355 364 * Match a format like 'F jS' or 'F j' (month name, followed by day with an optional ordinal suffix) 356 365 * and change it to declined 'j F'. 357 366 */ 358 if ( preg_match( '#\b[^\d ]+ \d{1,2}(st|nd|rd|th)?\b#u', trim( $date ) ) ) { 367 if ( $format ) { 368 $decline = preg_match( '#F [dj]#', $format ); 369 } else { 370 // If the format is not passed, try to guess it from the date string. 371 $decline = preg_match( '#\b[^\d ]+ \d{1,2}(st|nd|rd|th)?\b#u', trim( $date ) ); 372 } 373 374 if ( $decline ) { 359 375 foreach ( $months as $key => $month ) { 360 376 $months[ $key ] = '#\b' . preg_quote( $month, '#' ) . ' (\d{1,2})(st|nd|rd|th)?\b#u'; 361 377 } -
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', 'F y', 'Январь 16', 'Январь 16' ), 78 array( 'ru_RU', 'l, d F Y H:i', 'Суббота, 19 Январь 2019 10:50', 'Суббота, 19 января 2019 10:50' ), 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