coltonOP
@coltonOP (こるとんくん)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

JavaScriptで日付比較がうまくいかない

解決したいこと

Webアプリを製作しているのですが、日付入力フォームに入力された日付を取得して今日の日付と比較して、
今日以前の日付であればエラー表示を出すコードを書いたのですが、

今日よりも後の日付を入力してもエラーが出てしまいます。
色々調べたりして解決方法を探っているのですが、なかなか解決しないので質問させて頂きました。

何が原因なのでしょうか?

<form method="post" class="mother" name="Radio" id="validateobjects"  action="" novalidate="novalidate">
        <div class="menu1">
            <div>                
                <div class="p3">
                    <a>締め切り日</a><br>
                    <a><input type="date" name="deadline_m"  required="" id="id_deadline_m" aria-invalid="true"></a>
                </div>
                <div class="p4">
                    <a>開始日</a>
                    <a><input type="date" name="start_m" required="" id="id_start_m" class="valid" aria-invalid="false"><label id="id_start_m-error" class="error" for="id_start_m" style="display: none;"></label></a>
                    <a></a>
                </div>
                <div class="p4">
                    <a>終了日</a>
                    <a><input type="date" name="end_m" required="" id="id_end_m" class="valid" aria-invalid="false"><label id="id_end_m-error" class="error" for="id_end_m" style="display: none;"></label></a>
                </div>  
        </div>
   
        <button type="submit">save</button>
    </form>
$(function(){

    $('#validateobjects').validate({
    
        rules: {
            
            deadline_m: {
                afterNow: true,
            },
        },
        
        messages: {
            
            name_m: {
                required: '名前を入力してください' ,
            
            },
        },
    
    });
    
    var now = new Date;
    
    $.validator.addMethod(
        "afterNow",
        function(value, element) {
            return now < $('#id_deadline_m').val()
        },
        "締切日は今日より後にして下さい。"
    
    );

});


0

2Answer

dateフィールドのvalueは文字列形式の日付を返しそのままではDateと比較できないので,valueAsDateやvalueAsNumberを見るかDate.parseとかで変換してください.

4Like

原因はすでに回答されているので補足ですが、日付文字列をDateに変換して比較する際はタイムゾーンについて注意が必要です。

日付文字列をDateに変換する例(2023年4月5日)
console.log(new Date('2023-04-05')); // Wed Apr 05 2023 09:00:00 GMT+0900 (日本標準時)
console.log(new Date(2023, 3, 5)); // Wed Apr 05 2023 00:00:00 GMT+0900 (日本標準時)

どちらも2023年4月5日をDateにしていますが、9時間のズレが生じます。

日付のみの文字列(例: "1970-01-01")は UTC として扱われ、日付時刻の文字列(例: "1970-01-01T12:00")は ローカルとして扱われます。したがって、入力形式が 2 つの型の間で一貫していることを確認することも推奨されます。

詳しくはリンク先の"日付文字列"の項を参照してください。

0Like

Your answer might help someone💌