開始日と終了日のページに Kendo Datepicker フィールドのペアがあります。開始日はデフォルトで今日の日付に設定され、終了日はデフォルトで 1 年後の今日の日付に設定されます。ユーザーは、Kendo Datepicker カレンダーから日付を選択するか、手動で日付を入力できます。
[終了日] フィールドの Datepicker カレンダー ポップアップには「最大」オプションが設定されているため、現在から 1 年を超える日付は表示されませんが、ユーザーは後の日付を手動で入力できます。その場合、フォームで [送信] をクリックすると、サーバー側の検証によって問題が検出され、エラーが表示されてフォームが再度表示されます。
ユーザーが Datepicker フィールドに手動で入力した日付をそのまま残して、問題の原因を確認できるようにしたいのですが、カレンダーの「最大」オプションはそのままにしておきます。しかし、Datepicker オプションを「最大値」と最大値の後の「値」で設定すると、値が間違った形式で表示されます。
複製する方法は次のとおりです。
HTML:
<!-- Note future date in 'value' attribute. -->
<input id='dateField' style="width: 100%;" type="text" value="20160618">
JS:
var dateField = $("#dateField");
// The DatePicker's value comes from the dateField's 'value' attribute.
var value = moment(dateField.val(), 'YYYYMMDD').toDate(); // moment().toDate() gives a JavaScript Date object.
// Initialize the date picker options object with some common settings.
datePickerOptions = {
format: 'MM/dd/yyyy',
value: value,
}
// Set the max to be one year from now.
datePickerOptions.max = new Date(moment(new Date()).add('years', 1).toDate());
// Initialize the DatePicker.
dateField.kendoDatePicker(datePickerOptions);
// Here's a workaround I found... After initializing the picker, manually set the value back to the correctly formatted string.
//dateField.val(moment(value).format('MM/DD/YYYY'));
入力タグの「値」属性を最大日付より後の日付に設定すると、日付は次のように表示されます。
金 6 月 19 2015 00:00:00 GMT-0700 (太平洋標準時)
それがどうあるべきかの代わりに:
2015/06/15
これは剣道のバグですか、それとも設計上壊れていますか? それとも私はどこかでふざけていますか?