2015-08-03 2 views
0

У меня есть простая функция для установки поля на несколько недель с сегодняшнего дня с помощью окна выбора. Но он продолжает устанавливать дату на сегодняшний день.Функция JQuery не устанавливает/исчисляет правильную дату

Это HTML

<input type="text" name="rfq[ship_date]" id="rfq_ship_date" class="hasDatepicker"> 

<select name="weeks" id="weeks"> 
     <option value="1">1 weeks</option> 
     <option value="2">2 weeks</option> 
     <option value="3">3 weeks</option> 
     <option value="4">4 weeks</option> 
     ..... 

Я это для яваскрипта

$ -> 
    today = new Date 

    $('#weeks').change -> 
    weeks = $(this).val() 
    $('#rfq_ship_date').val(today + (weeks*1000*3600*24*7)) 

return 

ответ

2

Добавить миллисекунды и снова к дате.

Вместо

$('#rfq_ship_date').val(today + (weeks*1000*3600*24*7)) 

Использование

$('#rfq_ship_date').val(new Date(today.getTime() + (weeks * 1000 * 3600 * 24 * 7))) 
+0

Спасибо! Так оно и было. Но почему это имеет значение? – Suavocado

+2

@suavocado Если вы используете '+' с 'Date', он преобразуется в строку и выполняет конкатенацию, а не арифметику даты/времени. – Barmar

+1

Попробуйте 'console.log (new Date + 12345)' и посмотрите результат. – Barmar

2

Вы можете добавлять дни непосредственно к дате getDate и setDate:

new_date = new Date; 
new_date.setDate(new_date.getDate() + weeks * 7); 
$("#rfq_ship_date").val(new_date); 
+0

Спасибо, ваш ответ работает. Есть ли функциональная разница между вашим ответом и cpshah? Единственная причина, по которой я оставляю это как другой ответ, состоит в том, что у меня есть много полей, которые используют функцию .val, и это помогает мне организовать их (и я должен в конце концов объяснить это и коллеге). Имейте upvote для вашего времени, хотя! – Suavocado

+1

Нет, нет существенной разницы. Я думаю, что мой немного понятнее, потому что вам не нужно выяснять, что делают все умножения. – Barmar

Смежные вопросы