2015-12-14 8 views
0

Привет всем Я использую библиотеку Date js и имею проблему с добавлением дополнительных месяцев.Дата js не может добавлять месяцы

Вот мой простой код:

var durationMonth = $('#periodId').find(':selected').data('id'); // value => 3 m 
var startDate = $('#comencingDate').val(); // value -> 2015.12.14 
$('#expiringDate').val(Date.parse(startDate + ' + ' + durationMonth).toString("yyyy-MM-dd")); 
// This return 2016-03-03, but have to return 2016-03-13 

Вот несколько демо http://jsfiddle.net/d9rttxta/1/

Проблема только с месяцами, днями и годами работать нормально. Если у вас есть какие-либо предложения, я буду очень рад услышать. Заранее спасибо.

Ожидаемый результат: 2016-03-13

Фактический результат: 2016-03-03

+0

см. Http://stackoverflow.com/q/5645058/1846918 –

+0

Да, просто перечитайте вопрос. oops ... но в любом случае, добавление месяцев никогда не является точной вещью, так как месяцы являются переменной длиной. это месяц 28 дней? 29? 30? 31? что «ян 31 + 1 месяц» feb 28? 3 марта? что такое feb 28 + 1month? 28 марта? или 31 марта, потому что вы идете в последний день месяца в последний день следующего месяца? –

+0

@MarcB yup. Необходимо использовать библиотеку, которая на самом деле имеет этот материал, сваренный в нее, или сделать свой собственный. Как и кто-то другой, это очень старая библиотека, которая, похоже, не работает активно. Или добавьте дни. Слишком много путаницы. – ragerory

ответ

2

Добавление месяца до даты будет сбросить дату месяца на 1-й день месяца. Поэтому вам нужно извлечь часть дня из значения, а затем добавить его с помощью значения месяца.

$('.change').on('click', function() { 
      var durationMonth = $('#periodId').find(':selected').data('id');  
      var startDate = $('#comencingDate').val(); 
      $('#expiringDate').val(Date.parse(Date.parse(startDate).toString("dd") + ' + ' + durationMonth).toString("yyyy-MM-dd")); 
}); 

Рабочий пример: http://jsfiddle.net/d9rttxta/3/

UPDATE: Для того, чтобы добавить в месяц на дату, которая в будущем году, вот что вы можете попробовать:

$('.change').on('click', function() { 
      var durationMonth = $('#periodId').find(':selected').data('id');  
      var startDate = $('#comencingDate').val(); 
     var monthDiff = Date.parse(startDate).getMonth() - new Date().getMonth() 
     + (12 * (Date.parse(startDate).getFullYear() - new Date().getFullYear())); 

     var calcDate = Date.parse(Date.parse(startDate).toString("dd") + ' + ' + durationMonth).toString("yyyy-MM-dd"); 

     if(monthDiff > 0) 
     { 
     var n_calcDate = new Date(calcDate); 
     n_calcDate.setMonth(n_calcDate.getMonth() + monthDiff); 
     n_calcDate.setDate(n_calcDate.getDate() + 1); 
     calcDate = n_calcDate.toString("yyyy-MM-dd"); 
     } 

      $('#expiringDate').val(calcDate); 
}); 

Рабочий пример: http://jsfiddle.net/d9rttxta/5/

+0

Ницца. Протестировал его с добавлением 2 месяца к 2015-12-31 годам, и я получил то, что, как я думаю, должен дать мне. – ragerory

+0

Отлично. Рад, что это сработало для вас. – DinoMyte

+0

Привет, DinoMyte, молодец, но теперь проблема в том, что если я выбираю «От: 2016-03-14», а затем выбираю «Период 2 месяца», результат «2016-02-14», но должен быть «2016- 05-14" . Как решить эту проблему? Благодарю. – diank