作成日: 2018/05/29 最終更新日: 2018/07/25
文書種別
不具合
状況
修正済み
詳細
InputDateでdateFormatオプションに"ggg ee/MM/dd"などの和暦を設定した際、存在しない日付を入力すると、年号が1つ前の年号に、年が1つ前の年号の最後の年に変更されてしまいます。
例えば、昭和1年1月と入力すると、大正15年に変更されてしまいます。
例えば、昭和1年1月と入力すると、大正15年に変更されてしまいます。
回避方法
この問題はバージョン3.20182.136で修正されました。下記よりダウンロードしてご利用ください。
Wijmo3_3.20182.136_hotfix.zip(7.71 MB)
※修正版を適用しない場合の回避方法は以下の通りです。
下記のようにfield.setTextメソッドを上書きすることで、存在しない和暦を入力時に、年号を変更せずに月日を適切な範囲内の値に変更することができます。
<script type="text/javascript">
$(document).ready(function () {
$("#textbox1").wijinputdate(
{
culture: "ja-JP",
dateFormat: "ggg ee/MM/dd",
});
// ---- 回避策ここから ----
var wijDate = $('#textbox1').data('wijmoWijinputdate');
var field = wijDate._textProvider.formatter.descriptors[2];
field.setText = function(value, allowchangeotherpart, result){
var DateTimeInfo = wijmo.input.DateTimeInfo;
if (isNaN(parseInt(value))) {
return false;
}
var date = this._txtProvider.getDate();
var eraDate = DateTimeInfo.GetEraDate(date);
if (eraDate.eraYear !== -1) {
var newValue = String(eraDate.eraYear) + value;
var eraYear = parseInt(newValue.substring(newValue.length - 2, newValue.length));
if (eraYear > DateTimeInfo.GetEraYears()[eraDate.era]) {
eraYear = DateTimeInfo.GetEraYears()[eraDate.era];
}
var nullFlag = this._txtProvider.inputWidget.options.date == null;
if (nullFlag) {
eraYear = parseInt(value);
}
if (eraYear == 0) {
return true;
}
var newDate = DateTimeInfo.ConvertToGregorianDate(eraDate.era, eraYear, date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), false);
if (eraDate.era < DateTimeInfo.GetEraCount() - 1) {
var maxEraDate = DateTimeInfo.GetEraDates()[eraDate.era + 1];
if (newDate > maxEraDate) {
eraYear = DateTimeInfo.GetEraYears()[eraDate.era] - 1;
newDate = DateTimeInfo.ConvertToGregorianDate(eraDate.era, eraYear, date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), false);
}
}
if (eraYear == 1 && eraDate.era >= 0 && eraDate.era < DateTimeInfo.GetEraCount()) {
var minEraDate = DateTimeInfo.GetEraDates()[eraDate.era];
if (newDate < minEraDate) {
newDate = DateTimeInfo.ConvertToGregorianDate(eraDate.era, eraYear, minEraDate.getMonth() + 1, minEraDate.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), false);
}
}
this._txtProvider.setDate(newDate);
return true;
}
return false;
}
// ---- 回避策ここまで ----
});
</script>
Wijmo3_3.20182.136_hotfix.zip(7.71 MB)
※修正版を適用しない場合の回避方法は以下の通りです。
下記のようにfield.setTextメソッドを上書きすることで、存在しない和暦を入力時に、年号を変更せずに月日を適切な範囲内の値に変更することができます。
<script type="text/javascript">
$(document).ready(function () {
$("#textbox1").wijinputdate(
{
culture: "ja-JP",
dateFormat: "ggg ee/MM/dd",
});
// ---- 回避策ここから ----
var wijDate = $('#textbox1').data('wijmoWijinputdate');
var field = wijDate._textProvider.formatter.descriptors[2];
field.setText = function(value, allowchangeotherpart, result){
var DateTimeInfo = wijmo.input.DateTimeInfo;
if (isNaN(parseInt(value))) {
return false;
}
var date = this._txtProvider.getDate();
var eraDate = DateTimeInfo.GetEraDate(date);
if (eraDate.eraYear !== -1) {
var newValue = String(eraDate.eraYear) + value;
var eraYear = parseInt(newValue.substring(newValue.length - 2, newValue.length));
if (eraYear > DateTimeInfo.GetEraYears()[eraDate.era]) {
eraYear = DateTimeInfo.GetEraYears()[eraDate.era];
}
var nullFlag = this._txtProvider.inputWidget.options.date == null;
if (nullFlag) {
eraYear = parseInt(value);
}
if (eraYear == 0) {
return true;
}
var newDate = DateTimeInfo.ConvertToGregorianDate(eraDate.era, eraYear, date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), false);
if (eraDate.era < DateTimeInfo.GetEraCount() - 1) {
var maxEraDate = DateTimeInfo.GetEraDates()[eraDate.era + 1];
if (newDate > maxEraDate) {
eraYear = DateTimeInfo.GetEraYears()[eraDate.era] - 1;
newDate = DateTimeInfo.ConvertToGregorianDate(eraDate.era, eraYear, date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), false);
}
}
if (eraYear == 1 && eraDate.era >= 0 && eraDate.era < DateTimeInfo.GetEraCount()) {
var minEraDate = DateTimeInfo.GetEraDates()[eraDate.era];
if (newDate < minEraDate) {
newDate = DateTimeInfo.ConvertToGregorianDate(eraDate.era, eraYear, minEraDate.getMonth() + 1, minEraDate.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), false);
}
}
this._txtProvider.setDate(newDate);
return true;
}
return false;
}
// ---- 回避策ここまで ----
});
</script>
旧文書番号
82775