1

jQueryUI datepickerにバグがあり、要求通りに世紀をラップしません。私は短い年のカットオフとして69を入れ、効果がないようです。代わりに、UIは、87より下の任意の年の1970を示します(したがって、有効であると受け入れられません)。私は何か間違っているのですか?入力された値は、1970-1986の間にUIに同期されません。Datepickerが2桁の年形式の日付を正しく切り取っていない

enter image description here

目標は、ユーザが、それぞれ70の意味1970年69意味2069の短い表記で2069年に1970の間の任意の日付を設定することができるようにすることです。

JSFiddle。 Stack Overflowの埋め込みプレーヤーは、datepickerのUIを正しく表示しません。入力フィールドを隠します.jsfiddleを使用してください。

$(document).ready(function() { 
 
    $('#myDate').datepicker({ 
 
    changeMonth: true, 
 
    changeYear: true, 
 
    dateFormat: 'm/d/y', 
 
    shortYearCutoff: '69', 
 
    yearRange: '1970:2069' 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/> 
 

 
<input id="myDate" name="myDate" type="date" value="" />

+1

適切なレイアウトでここを実行するには、スニペットの「フルページ」バージョンを使用します。 – Barmar

答えて

1

使用type="text"ではなく、入力フィールドにtype="date"type="date"を使用すると、ブラウザーは未処理の入力フィールドの書式を制御します。これは、日付ピッカーのdateFormatオプションを無効にします。それはない

$(document).ready(function() { 
 
    $('#myDate').datepicker({ 
 
    changeMonth: true, 
 
    changeYear: true, 
 
    dateFormat: 'm/d/y', 
 
    shortYearCutoff: '69', 
 
    yearRange: '1970:2069' 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/> 
 

 
<input id="myDate" name="myDate" type="text" value="" />

+0

あなたの答えをありがとう。 'type =" text "'を変更した後も同じ問題が発生します。 – Neolisk

+0

それは私のために働く。私が '3/31/69'と入力すると、私は2069年3月31日になります。' 3/31/70'と入力すると1970年3月31日になります。 – Barmar

+0

69でも問題ありません。それは1970年から1986年までの期間に過ぎず、すべてが1970年になると思われます。 – Neolisk

1

TLを行い、DRshortYearCutoffは整数でなければなりません、私は文字列としてそれを置きます。この場合、jQueryUI datepickerはそれを黙って無視します。それを機能させるには、以下のコード変更が必要でした。

$(document).ready(function() { 
    $('#myDate').datepicker({ 
    changeMonth: true, 
    changeYear: true, 
    dateFormat: 'm/d/y', 
    shortYearCutoff: 69, //integer is important, string will get ignored 
    yearRange: '1970:2069' 
    }); 
}); 

Fixed JSFiddle

の関連コードブロックは次のとおりです。jQueryUI.js

_getFormatConfig: function(inst) { 
    //... 
    shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff : 
     new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));   
    //return ... 
}, 

私はそれを置くための正しい方法は、値がintとして解析することが可能かどうかをチェックされるだろう、それはJavascriptのタイプレス精神によりインラインだろうと思います。 jQueryUIチームに任せてください。

+1

良いキャッチ。私はこれが問題であることに驚いています。数字のように意味があるのであれば、それを内部的に変換すると期待しています。 Javascriptは通常、これを単独で処理しますが、それが何を比較しているかによって異なります。 – Barmar

関連する問題