bugfix> javascript > 投稿

入力要素から値を取得し、日付形式mm/dd/yyyyに変換し、日付に数日を追加していますが、Uncaught TypeErrorを取得しています:dt_cl.getDateは関数ではありません。

$('#dt_input').change(function() {
    var dep_dt = $(this).val();
    $('#eff_input').val(dep_dt);
    var eff_dt = new Date(dep_dt);
    var dt_cl = (eff_dt.getMonth() + 1) + '/' + eff_dt.getDate() + '/' +  eff_dt.getFullYear();
    var exp_dt = new Date().setDate(dt_cl.getDate()+364);
});

HTML

<input type="text" id="dt_input">
<input type="text" id="eff_input">

回答 1 件
  • 問題は、 dt_cl  ここで文字列に初期化されています:

    var dt_cl = (eff_dt.getMonth() + 1) + '/' + eff_dt.getDate() + '/' +  eff_dt.getFullYear();
    
    

    そして、あなたは getDate() を呼び出しています  ここで:

    var exp_dt = new Date().setDate(dt_cl.getDate()+364);
    
    

    文字列には getDate() がありません  方法。文字列に基づいて新しい日付を作成する必要があり、それが機能します。

    参考までに、多くの人が最初のフィールドを <input type="date"> にしたいと考えています。  入力が有効な日付形式であることを確認します。

    $('#dt_input').change(function() {
        var dep_dt = $(this).val();
        $('#eff_input').val(dep_dt);
        var eff_dt = new Date(dep_dt);
        // dt_cl is being set to a string here:
        var dt_cl = (eff_dt.getMonth() + 1) + '/' + eff_dt.getDate() + '/' +  eff_dt.getFullYear();
        
        // So, you need to take that string and make a new Date from it and then
        // you can call .getDate() on that new date.
        var exp_dt = new Date().setDate(new Date(dt_cl).getDate() + 364);
        
        // The result can be seen by making yet another date using the previous one
        console.log(new Date(exp_dt));
    });
    
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="date" id="dt_input">
    <input type="text" id="eff_input">
    
    

あなたの答え