I have a fix for you, but it is kind of complicated...
In /classes/class-shortcodes.php, add this at line 1214:
function get_nth_weekday_of_month( $strdate ) {
$englishnumber = array(
'first',
'second',
'third',
'fourth',
'fifth'
);
$date = date_i18n( 'j', $strdate );
$day = date_i18n( 'w', $strdate ) + 1;
$firstday = date_i18n( 'w', strtotime( date_i18n( 'Y-m-1', $strdate ) ) ) + 1;
for ( $i = 0; $i <= 5; $i++ ) {
if ( ( $day + ( 7 * $i ) ) >= $date ) {
if ( $day < $firstday ) {
$i--;
}
return $englishnumber[$i];
}
}
return false;
}
Again, in /classes/class-shortcodes.php, replace lines 1111-1130 with this:
case 'monthly' :
$s_y = date_i18n( 'Y', $str_rsdate * 86400 );
$s_m = date_i18n( 'n', $str_rsdate * 86400 );
$c_y = date_i18n( 'Y', $strdate );
$c_m = date_i18n( 'n', $strdate );
$month_diff = ( $c_y - $s_y ) * 12 + ( $c_m - $s_m );
if ( 0 == $month_diff % $cal_data->r_every ) {
if ( 0 == $cal_data->r_by ) { // by day of month
if ( date_i18n( 'd', $strdate ) == date_i18n( 'd', strtotime( $cal_data->r_start_datetime ) ) ) {
$cal_entries[date_i18n( 'Y-m-d', $strdate )][$rstime][] = $cal_data->id;
}
} else { // by day of week
$dom = $this->get_nth_weekday_of_month( strtotime( $cal_data->r_start_datetime ) );
$cdom = $this->get_nth_weekday_of_month( $strdate );
if ( date_i18n( 'D', $strdate ) == date_i18n( 'D', strtotime( $cal_data->r_start_datetime ) )
&& $dom == $cdom ) {
$cal_entries[date_i18n( 'Y-m-d', $strdate )][$rstime][] = $cal_data->id;
}
}
}
break;
Then in /includes/js/write-edit-post.js, replace line 291 with:
r_by: $('input.repeats_by:selected').val(),
I will be adding this to the next release.