2016-08-16 5 views
0

checkOutの分をcheckInの値に設定しています。私の問題は、firstdateに1日追加する必要があるということです。 (当日チェックインの日以前にチェックアウトすることはできません)。JavaScriptを日付文字列に追加する

<script> 
function updatedate() { 
var firstdate = document.getElementById("checkIn").value; 
document.getElementById("checkOut").value = ""; 
document.getElementById("checkOut").setAttribute("min",firstdate); 
} 
</script> 

Check In 
<input type="date" id="checkIn" onchange="updatedate();" name="checkin"> 

Check out 
<input type="date" id="checkOut" min="" name="checkout"> 
+0

? – RobG

+0

マークされた重複はそれほど役に立ちません。 OPには、Dateオブジェクトではなく、日付入力があります。そのため、文字列を解析し、1日追加してから変換し直す必要があります。 ISO 8601の日付文字列は、日付入力によってローカルとして扱われますが、UTCはDateコンストラクタによって扱われます。その助けはどこですか? – RobG

答えて

1

それは一種のやる可能なのだが、それは現時点では日付の入力をサポートしている唯一のブラウザですので、それが唯一のChromeで動作します。ああ、この解決策は、日付を解析し、それに1日を正しく追加することが難しいということから、momentjsを使用しています。

function updatedate() { 
 
    var checkin = document.getElementById("checkIn").value; 
 
    checkin = moment(checkin); 
 
    var checkout = checkin.add(1, 'd'); 
 
    document.getElementById("checkOut").setAttribute("min", checkout.format('YYYY-MM-DD')); 
 
}
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script> 
 
<link href="//cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css" rel="stylesheet"/> 
 
<div class="container"> 
 
    Check In 
 
    <input type="date" id="checkIn" onchange="updatedate();" name="checkin">Check out 
 
    <input type="date" id="checkOut" min="" name="checkout"> 
 
</div>

+0

クロムでしかうまくいかない – derp

+0

日付を解析して日を追加するのは実際には非常に簡単で、確かにmoment.jsのような大きなライブラリは必要ありませんが、小さな構文解析ライブラリと書式設定ライブラリが役立つかもしれません。 – RobG

+0

8月31日に1日追加すると何が得られますか? 2月28日はうるう年?それは不可能ではありませんが、それは確かに非常に単純ではありません。 – Will

0

momentlessソリューションは、JS日にcheckinDateを解析し、その後checkinDateに1日を加算しながら、新しい日付を作成することです。ええと、瞬間は、日付を扱うときには、ジャンプライブラリです。ここ

JSfiddleは:

var checkoutDateFormat = checkoutDate.toISOString().split('T')[0]; 
0

未使用のサポート入力タイプ日付ですべてのブラウザ、:

https://jsfiddle.net/xugajae5/

入力が期待される分形式を得ることにハックのビットがありましただからこそあなたはそれに対処する必要があります。

firstdateの値をDateオブジェクトに変換し、曜日を追加してから、必要な形式で日付を取得することができます。ただし、日付入力の値(ISO 8601形式の日付文字列)はローカルとして扱われますが、DateコンストラクタではUTCとして扱われます。

文字列をローカルの日付として解析し、その日を追加してから、適切な形式の文字列を取得する必要があります。以下のコードは単なる例であり、日付操作のためにライブラリを使用することをお勧めします。 Dateコンストラクタで日付文字列を解析しないように注意してください。実行可能なスニペットとしてのコードを投稿していないのはなぜ

function getTomorrow(el) { 
 
    var form = el.form; 
 
    var start = parseISOAsLocal(form.start.value); 
 
    // Check if input date was valid 
 
    if (!start.getTime()) { 
 
    form.tomorrow.value = ''; 
 
    form.start.value = 'Invalid date'; 
 
    return; 
 
    } 
 
    start.setDate(start.getDate() + 1); 
 
    form.tomorrow.value = formatISODate(start); 
 
} 
 

 
function parseISOAsLocal(s) { 
 
    var b = s.split(/\D/); 
 
    var d = new Date(b[0], --b[1], b[2]); 
 
    return d && d.getMonth() == b[1]? d : new Date(NaN); 
 
} 
 

 
function formatISODate(date) { 
 
    return ('000' + date.getFullYear()).slice(-4) + '-' + 
 
     ('0' + (date.getMonth() + 1)).slice(-2) + '-' + 
 
     ('0' + date.getDate()).slice(-2); 
 
}
<form> 
 
    Start (yyyy-mm-dd): 
 
    <input type="date" name="start" value="2016-08-31"><br> 
 
    Tomorrow: <input type="date" name="tomorrow" readonly><br> 
 
    <input type="button" onclick="getTomorrow(this)" 
 
     value="Show tomorrow"> 
 
</form> 
 

0
<script> 
    function updatedate(){ 
     var checkInValue = document.getElementById("checkIn").value; 
     var checkInDate = Date.parse(checkInValue); 
     var minDate = new Date(checkInDate + 24 * 3600 * 1000); 
     document.getElementById("checkOut").setAttribute("min", minDate.toDateString()); 
    } 
</script> 
関連する問題