2016-08-16 5 views
0

Я устанавливаю min checkOut как значение checkIn. Моя проблема заключается в том, что мне нужно добавить один день до firstdate. (Не должны быть в состоянии проверить или до проверки в день.)Добавить один день на день строка в 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, поэтому необходимо проанализировать строку, добавить день, а затем преобразовать ее. Обратите внимание, что строка даты ISO 8601 рассматривается как локальная по дате ввода, но UTC конструктором Date. Где помощь в этом? – RobG

ответ

1

Это своего рода выполнимо, но он работает только в Chrome, так как это единственный браузер, который поддерживает ввод даты в данный момент. О, и это решение использует momentjs, потому что синтаксический анализ даты и правильное добавление 1 дня к ней намного сложнее, чем это звучит.

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

Добавить 1 день - 31 августа и что вы получите? Как насчет 28 февраля в високосный год? Это не невозможно, но это, конечно, не «очень просто». – Will

0

безмоментное решение разобрать checkinDate в дату JS и затем создать новую дату во время добавления в один прекрасный день к checkinDate. Хотя да, momentJS - это библиотека goto, когда речь идет о датах.

JSfiddle здесь:

https://jsfiddle.net/xugajae5/

Был немного рубить в получении мин формат, что входной ожидаемый:

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

Не все браузеры в использовании даты поддержки ввода типа, так что вам нужно будет с этим справиться.

Затем вы можете преобразовать значение 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> 
Смежные вопросы