質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
date

dateは、date型や日付に関する関数や処理についてのタグです

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2160閲覧

[HTML][jQuery]2つの日付から差分を自動的に表示させる

Miraii

総合スコア1

date

dateは、date型や日付に関する関数や処理についてのタグです

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/07/31 03:15

編集2021/07/31 14:09

前提・実現したいこと

カレンダーから日付を選んで、2つの日付の差分を自動的に表示させたい

発生している問題・エラーメッセージ

[HTML]id=returnDate 部分に日数が表示されない

該当のソースコード

[HTML] <tr> <th class="bottom" colspan="2"> <label for="start">開始日<span class="red">*</span></label> </th> <td> <p> <input id="FromDate" type="date" name="FromDate" required="1" size="30"> </p> </td> </tr> <tr> <th class="bottom" colspan="2"> <label for="end">終了日<span class="red">*</span></label> </th> <td> <p> <input id="ToDate" type="date" name="ToDate" required="1" size="30"> </p> </td> </tr> <tr> <th class="bottom" colspan="2"> <label>日数</label> </th> <td> <span id="returnDate"></span> </td> </tr> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー [jQuery①] jQuery(function($) { $('#FromDate').change(function(event) { setDate(); }); $('#ToDate').change(function(event) { setDate(); }); function setDate(){ var fromDate = new Date($('#FromDate').val() ); var toDate = new Date($('#ToDate').val() ); if (!toDate.getDate() || fromDate.getDate()>toDate.getDate()){ var year = fromDate.getFullYear().toString(); var mm = (fromDate.getMonth() + 1).toString(); var dd = fromDate.getDate().toString(); var yyyymmdd = year + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]); $('#ToDate').val(yyyymmdd); } var days = Math.floor((toDate.getTime() - fromDate.getTime()) / 86400000); if (days>=1){ $('#returnDate').html(' ('+days+')'); }else{ $('#returnDate').html(''); } } }); ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー [jQuery②] jQuery(function($) { jQuery(document).on('blur', '#FromDate, #ToDate', function(){ var date1 = document.getElementById("FromDate").value; var date2 = document.getElementById("ToDate").value; var diff = getDiff(date1, date2); jQuery("#returnDate").val(diff); }); }); /* *日付の差分日数を返却します。 */ function getDiff(date1Str, date2Str) { var date1 = new Date(date1Str); var date2 = new Date(date2Str); // getTimeメソッドで経過ミリ秒を取得し、2つの日付の差を求める var msDiff = date2.getTime() - date1.getTime(); // 求めた差分(ミリ秒)を日付へ変換します(経過ミリ秒÷(1000ミリ秒×60秒×60分×24時間)。端数切り捨て) var daysDiff = Math.floor(msDiff / (1000 * 60 * 60 *24)); // 差分へ1日分加算して返却します return ++daysDiff;  → $('#returnDate').text(++daysDiff); で実装できたがNaNと最初に表示される。 }

試したこと

Google検索で同じような事例をいくつか試してみました。
type=textではなくtype=dateで表示させたいです。
①の方法でも②の方法でもいいのですが、なぜ表示されないのかがわからないです。
教えていただけますと幸いです。よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私の環境ではjQuery②の方は表示されませんでしたが、jQuery①の方で(5)などが表示され正しく動作しているようです。

①の方にテストで1文追加してみて

js

1jQuery(function($) { 2 $('#returnDate').html('test');//テスト用に追加

returnDate部分へ正しく書き込みできてるかデバッグしてみてはどうでしょうか。

投稿2021/07/31 12:26

webgoto

総合スコア1293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Miraii

2021/07/31 14:07

ご回答ありがとうございました! こちらテストで試してみたところ、表示されず HTMLで読み込めてないことがわかりました。 修正した後、testが表示されることを確認し ②の最後を「return ++daysDiff;」→「$('#returnDate').text(++daysDiff);」 上記のようにすることで日数の表示ができました。 しかし、最初にNaNと表示されてしまうのですが こちらの理由はわかりますでしょうか? 合わせて教えていただけますと幸いです。 よろしくお願いいたします。
webgoto

2021/07/31 14:30

一方の入力が空文字の状態でgetDiffを実行しているため日の計算でエラーが起きています。 getDiff関数に入力の判定を追加し、いづれかの入力が空の場合、空文字を返すようにすると良いと思います。 function getDiff(date1Str, date2Str) { if(!date1Str || !date2Str) return ''; //追加
Miraii

2021/08/01 02:00

おっしゃる通りでした。 ご回答ありがとうございました。 上記の追加でNaN非表示にできました! ちなみになのですが 2つの日付を入力した後、自動的に表示させるようにすることはできますか? 今の状態ですと、どこかをクリックしないと差分の日数が表示されないようになっています。 教えていただけますと幸いです。よろしくお願いいたします。
webgoto

2021/08/01 02:21

jQuery(document).on('blur', '#FromDate, #ToDate', function(){ ↓ jQuery(document).on('input', '#FromDate, #ToDate', function(){ でそのようになるかと思います。
Miraii

2021/08/02 12:19

上記のコードで自動化できました! 全てにご回答いただき、ありがとうございました????‍♀️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問