Tats_innit からの回答に基づいて、いくつかの問題を解決するソリューションを次に示します。
$(function() {
$('.dp').datepicker({
dateFormat: 'd MM yy',
beforeShow: function(inp, inst) {
if (inp.classList.contains("Birthday")) {
inst.dpDiv.addClass('BirthdayDatePicker');
return {
dateFormat: 'MM d',
defaultDate: new Date(1904, 0, 1),
minDate: new Date(1904, 0, 1),
maxDate: new Date(1904, 11, 31),
};
}
},
onClose: function(dateText, inst) {
inst.dpDiv.removeClass('BirthdayDatePicker');
}
});
});
.BirthdayDatePicker .ui-datepicker-year {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
Birthday: <input type='text' class='dp Birthday' placeholder='Month day'>
<div style="height: 12px" class="spacer"></div>
Defaults: <input type='text' class='dp' placeholder='day Month year'>
入力でクラスを使用すると、日付ピッカーからどの動作が必要かを指定するより簡単な方法であることがわかりました。
Birthdayクラスが見つかった場合、現在の年ではなく 1904 年を使用します。これは、1904 年がうるう年であり、2 月 29 日が利用可能であることを保証するためです。また、minDate/MaxDate オプションを使用して、ウィジェットを 12 か月の期間に制限します。numberOfMonths: [ 3, 4 ]
必要に応じて、返されたオブジェクトに含めて、1 年全体を一度に表示することもできます。