2014-01-08 7 views
1

Я хочу добавить 5 дней до даты строки в Javascript:Как добавить дни до даты?

var olddate = '23.12.2013'; 
olddate = olddate.split('.'); 
var tmpDate = new Date(olddate[2],olddate[1],olddate[0]); 
tmpDate.setDate(tmpDate.getDate() + 5); 

var date = (tmpDate.getDate().toString().length < 2) ? '0' + 
    tmpDate.getDate() : tmpDate.getDate(); 

var month = (tmpDate.getMonth().toString().length < 2) ? '0' + 
    tmpDate.getMonth() : tmpDate.getMonth(); 

console.log(date + '.' + month + '.'+ tmpDate.getFullYear()); 

Этот код показывает 27.00.2014 вместо того, что я ожидал: 27.12.2013. Я хотел бы добавить 5 дней к дате String. Почему это отключено на месяц?

ответ

1

конструктора Date принимает числовые месяцев от 0 до 11, не 1 в 12 так вы с помощью месяца, когда вы это делаете:

var olddate = '23.12.2013'; 
// Calculate new date 
olddate = olddate.split('.'); 
var tmpDate = new Date(olddate[2],olddate[1],olddate[0]); 

Вы можете исправить для этого, делая это:

var tmpDate = new Date(+olddate[2], +olddate[1] - 1, +olddate[0]); 

Работа демо: http://jsfiddle.net/jfriend00/Aa4P7/

+0

Если я это, то результат будет 27.11.2013 но это может быть 27.12.2013 – julesdude

+0

@julesdude - вы, кажется, не понимаете. Попробуй. Оно работает.Месяцы передаются как «от 0 до 11», поэтому декабрь должен быть принят как 11, а не 12. Рабочая демонстрация: http://jsfiddle.net/jfriend00/Aa4P7/ – jfriend00

1

Очень простой подход будет использовать .setDate()

var olddate = '23.12.2013'; 
// Calculate new date 
olddate = olddate.split('.'); 
var tmpDate = new Date(olddate[2],olddate[1]-1,olddate[0]); 
var numberOfDaysToAdd = 6; 
tmpDate .setDate(tmpDate .getDate() + numberOfDaysToAdd); 

Но я бы Recommand использовать Moment.js. Используя это, вы можете манипулировать датой так, как хотите.

EDIT:

В вашем примере проблема в том, что Javascript Date() месяц начинается с 0. Таким образом, для примера, если вы

var abc = new Date(); 
console.log(abc.getMonth()); 

вы получите выход 0 за текущий месяц январь, не 1.

Так что учтите это, и вы получите правильные результаты.

+0

Это как раз мой пример? – julesdude

+0

Вот почему я рекомендовал вам использовать Moment.js. Который поддерживает много манипуляций с datetime. – Aks

+0

Но я ищу рабочее решение для своего кода – julesdude

0

Я использовал это много раз:

Вы можете передать три аргумента:
1. (время, чтобы быть добавлены) Примечание: Вы должны пройти Date вместо String.
2. type (Вы хотите добавить «час» или «день» или «moneth» или «year»)
3. n (Сколько раз вы хотите добавить? По умолчанию будет 1, если тип это "час", это означает, что вы хотите добавить 1 час, и т.д.)

calNByDateType : function(time, type) { 

    var myTime = new Date(time.valueOf()); 
    var n = 1; 
    if(arguments[2]!==undefined) { 
    n=arguments[2]; 
    } 
    if(type==="hour") { 
    myTime.setHours(myTime.getHours() + n); 
    } else if(type==="day") { 
    myTime.setDate(myTime.getDate() + n); 
    } else if(type==="month") { 
    myTime.setMonth(myTime.getMonth() + n); 
    } else if(type==="year") { 
    myTime.setFullYear(myTime.getFullYear() + n); 
    } 

    return myTime; 
} 
2

Я всегда создаю 7 функций для работы с датой в JS: addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addYears ,

Вы можете увидеть пример здесь: http://jsfiddle.net/tiagoajacobi/YHA8x/

Как использовать:

var now = new Date(); 
console.log(now.addWeeks(3)); 

Это те функции:

 Date.prototype.addSeconds = function(seconds) { 
      this.setSeconds(this.getSeconds() + seconds); 
      return this; 
     }; 

     Date.prototype.addMinutes = function(minutes) { 
      this.setMinutes(this.getMinutes() + minutes); 
      return this; 
     }; 

     Date.prototype.addHours = function(hours) { 
      this.setHours(this.getHours() + hours); 
      return this; 
     }; 

     Date.prototype.addDays = function(days) { 
      this.setDate(this.getDate() + days); 
      return this; 
     }; 

     Date.prototype.addWeeks = function(weeks) { 
      this.addDays(weeks*7); 
      return this; 
     }; 

     Date.prototype.addMonths = function (months) { 
      var dt = this.getDate(); 

      this.setMonth(this.getMonth() + months); 
      var currDt = this.getDate(); 

      if (dt !== currDt) { 
       this.addDays(-currDt); 
      } 

      return this; 
     }; 

     Date.prototype.addYears = function(years) { 
      var dt = this.getDate(); 

      this.setFullYear(this.getFullYear() + years); 

      var currDt = this.getDate(); 

      if (dt !== currDt) { 
       this.addDays(-currDt); 
      } 

      return this; 
     }; 
Смежные вопросы