2016-11-26 18 views
0

私はチェックアウト日はチェックイン日よりも早い全くないことを保証するために、これらの2つの入力を比較したい二つの入力入力から2つの日付を比較するにはどうすればよいですか?

From: <input id="from" type="date" placeholder="dd/mm/yy"><br> 
To: <input id="to" type="date" placeholder="dd/mm/yy"> 

があります。しかし、どのように比較するのですか? THX

+1

html5の日付入力は、常に 'yyyy-MM-dd'のように書式設定する必要があります。入力値が' dd/mm/yy'の値を設定しようとすると、無効な値が返されます。プレースホルダを変更する必要があると思っているだけです... – Endless

+0

@ Endless - すべての実装が日付入力をサポートするわけではありません。 – RobG

答えて

0

これは私がそれを

HTMLを行うだろう方法です

<script> 
    function compareDates() { 
     //Get the text in the elements 
     var from = document.getElementById('from').textContent; 
     var to = document.getElementById('to').textContent; 

     //Generate an array where the first element is the year, second is month and third is day 
     var splitFrom = from.split('/'); 
     var splitTo = to.split('/'); 

     //Create a date object from the arrays 
     var fromDate = Date.parse(splitFrom[0], splitFrom[1] - 1, splitFrom[2]); 
     var toDate = Date.parse(splitTo[0], splitTo[1] - 1, splitTo[2]); 

     //Return the result of the comparison 
     return fromDate < toDate; 
    } 
</script> 

<input id="from" type="date" placeholder="dd/mm/yy"><br> 
<input id="to" type="date" placeholder="dd/mm/yy"> 
<button onclick="compareDates()">Compare</button> 

どのように乗り遅れているか教えてください。

+0

うん、それは動作します!手伝ってくれてどうもありがとう! – tweaktweak

+0

ここにいくつかのエラーがあります:* Date.parse *はコンストラクタではなく、1つの引数しか取らず、 'new Date.parse(...)'は 'new Date(...)'でなければなりません。また、月のインデックスはゼロであるため、 'new Date(splitFrom [0]、splitFrom [1] - 1、splitFrom [2])'となります。答えは、ポストコードだけでなく、問題を説明し、それを修正する方法を説明する必要があります。 – RobG

0

あなたはvalueAsDateを使用して、コンパレータを使用することができます。

input1 = document.getElementById('from'); 
input2 = document.getElementById('to'); 

date1 = input1.valueAsDate; 
date2 = input2.valueAsDate; 
console.log(date1 < date2 ? 'valid' : 'invalid'); 
+0

あなたは正しいです、私はそれを修正します。 – marcan2020

0

あなたの日付形式は/ MM/YYをddをしたい場合は、文字列を日付に変換するには、次の機能を使用することができます。

function compareDate(str){ 
// str format should be dd/mm/yyyy. Separator can be anything e.g./or -. It wont effect 
var dt = parseInt(str.substring(0,2)); 
var mon = parseInt(str.substring(3,5)); 
var yr = parseInt(str.substring(6,10)); 
var date = new Date(yr, mon-1, dt); 
return date; 
} 

そして、単に入力から値を取得し、日付としてそれらを比較

var input1 = compareDate(document.getElementById('from').value); 
var input2 = compareDate(document.getElementById('to').value); 

Dateオブジェクトは、あなたが望むことを行います。日付ごとに1つずつ作成し、>、<、< =または> =を使って比較します。

+0

たぶん 'input.valueAsDate'を試してみませんか? – Endless

+0

* @ valueAsDate *に対するエンドレスブラウザのサポートは...? – RobG

0

JavaScriptを使用して、入力の値を取得できます。

var fromValue = document.getElementById('from').value; 
var toValue = document.getElementById('to').value; 

、その後の日付に変換するJavaScriptのDateオブジェクトを使用します。

var fromDate = new Date(fromValue); 
var toDate = new Date(toValue); 

と真夜中からの経過時間を削除します。

fromDate.setHours(0,0,0,0); 
toDate.setHours(0,0,0,0); 

次に、fromDatetoDate

if (fromDate === toDate) { ... } 
+0

'input.valueAsDate'を使ってみてください。 – Endless

+0

作品!!!!!!多くのありがとう!!!!!!! – tweaktweak

+0

もちろん、幸運。数行のコードを削除したい場合は、@Endlessの提案を含めることを忘れないでください。 – axlj

関連する問題