2010-09-29 23 views

Respuesta

393

Puede utilizar JavaScript, sin jQuery requiere:

var someDate = new Date(); 
var numberOfDaysToAdd = 6; 
someDate.setDate(someDate.getDate() + numberOfDaysToAdd); 

Formateo a dd/mm/yyyy:

var dd = someDate.getDate(); 
var mm = someDate.getMonth() + 1; 
var y = someDate.getFullYear(); 

var someFormattedDate = dd + '/'+ mm + '/'+ y; 
+73

Como la mayoría de las cosas javascript, el procesamiento de fecha incorporado es extremadamente potente, pero completamente no intuitivo. –

+9

@Joel: de acuerdo, es un headshaker que 'setDate()'. No intuitivo es un buen descriptor. –

+1

[Objeto de fecha] (https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date) como referencia. – Reigel

81

Se podría ampliar el objeto Date de JavaScript como este

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

y en su código de JavaScript, puede llamar al

var currentDate = new Date(); 
// to add 4 days to current date 
currentDate.addDays(4); 
+7

Eso no funcionará ... agregar días tendrá como resultado años y meses extraños. –

+14

@Ferryvandenheuvel: No es cierto. El método propuesto funciona perfectamente bien. –

+1

@Ferryvandenheuvel tenía razón porque la solución de Krishnas necesita una mejora menor pero importante para estar seguro si los días se dan como una cadena en lugar de un número entero: vea mi comentario a continuación http://stackoverflow.com/a/20468397/2732083 –

4

Se puede usar esta biblioteca "Datejs JavaScript de código abierto Fecha biblioteca".

4

He encontrado esto como un problema en javascript. Mira este enlace que me ayudó. ¿Alguna vez pensaste en extender el objeto de fecha?

http://pristinecoder.com/Blog/post/javascript-formatting-date-in-javascript

/* 
* Date Format 1.2.3 
* (c) 2007-2009 Steven Levithan <stevenlevithan.com> 
* MIT license 
* 
* Includes enhancements by Scott Trenda <scott.trenda.net> 
* and Kris Kowal <cixar.com/~kris.kowal/> 
* 
* Accepts a date, a mask, or a date and a mask. 
* Returns a formatted version of the given date. 
* The date defaults to the current date/time. 
* The mask defaults to dateFormat.masks.default. 
*/ 

var dateFormat = function() { 
    var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g, 
     timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, 
     timezoneClip = /[^-+\dA-Z]/g, 
     pad = function (val, len) { 
      val = String(val); 
      len = len || 2; 
      while (val.length < len) val = "0" + val; 
      return val; 
     }; 

    // Regexes and supporting functions are cached through closure 
    return function (date, mask, utc) { 
     var dF = dateFormat; 

     // You can't provide utc if you skip other args (use the "UTC:" mask prefix) 
     if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) { 
      mask = date; 
      date = undefined; 
     } 

     // Passing date through Date applies Date.parse, if necessary 
     date = date ? new Date(date) : new Date; 
     if (isNaN(date)) throw SyntaxError("invalid date"); 

     mask = String(dF.masks[mask] || mask || dF.masks["default"]); 

     // Allow setting the utc argument via the mask 
     if (mask.slice(0, 4) == "UTC:") { 
      mask = mask.slice(4); 
      utc = true; 
     } 

     var _ = utc ? "getUTC" : "get", 
      d = date[_ + "Date"](), 
      D = date[_ + "Day"](), 
      m = date[_ + "Month"](), 
      y = date[_ + "FullYear"](), 
      H = date[_ + "Hours"](), 
      M = date[_ + "Minutes"](), 
      s = date[_ + "Seconds"](), 
      L = date[_ + "Milliseconds"](), 
      o = utc ? 0 : date.getTimezoneOffset(), 
      flags = { 
       d: d, 
       dd: pad(d), 
       ddd: dF.i18n.dayNames[D], 
       dddd: dF.i18n.dayNames[D + 7], 
       m: m + 1, 
       mm: pad(m + 1), 
       mmm: dF.i18n.monthNames[m], 
       mmmm: dF.i18n.monthNames[m + 12], 
       yy: String(y).slice(2), 
       yyyy: y, 
       h: H % 12 || 12, 
       hh: pad(H % 12 || 12), 
       H: H, 
       HH: pad(H), 
       M: M, 
       MM: pad(M), 
       s: s, 
       ss: pad(s), 
       l: pad(L, 3), 
       L: pad(L > 99 ? Math.round(L/10) : L), 
       t: H < 12 ? "a" : "p", 
       tt: H < 12 ? "am" : "pm", 
       T: H < 12 ? "A" : "P", 
       TT: H < 12 ? "AM" : "PM", 
       Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""), 
       o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o)/60) * 100 + Math.abs(o) % 60, 4), 
       S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] 
      }; 

     return mask.replace(token, function ($0) { 
      return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1); 
     }); 
    }; 
}(); 

// Some common format strings 
dateFormat.masks = { 
    "default":  "ddd mmm dd yyyy HH:MM:ss", 
    shortDate:  "m/d/yy", 
    mediumDate:  "mmm d, yyyy", 
    longDate:  "mmmm d, yyyy", 
    fullDate:  "dddd, mmmm d, yyyy", 
    shortTime:  "h:MM TT", 
    mediumTime:  "h:MM:ss TT", 
    longTime:  "h:MM:ss TT Z", 
    isoDate:  "yyyy-mm-dd", 
    isoTime:  "HH:MM:ss", 
    isoDateTime: "yyyy-mm-dd'T'HH:MM:ss", 
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'" 
}; 

// Internationalization strings 
dateFormat.i18n = { 
    dayNames: [ 
     "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", 
     "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" 
    ], 
    monthNames: [ 
     "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", 
     "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" 
    ] 
}; 

// For convenience... 
Date.prototype.format = function (mask, utc) { 
    return dateFormat(this, mask, utc); 
}; 
+0

Enlace muerto. .. Afortunadamente, la página se guardó en [WayBack Machine] (https://web.archive.org/web/20120329060501/http://www.stevenleath.com/blogengine.web/post/2011/03/09/How- do-I-add-resta-days-in-javascript.aspx). Aunque no hay mucha información útil en la página que la respuesta, es bueno echar un vistazo a la fuente a la que se hace referencia. – Fr0zenFyr

16

La respuesta aceptada aquí me dio resultados impredecibles, a veces extrañamente adición de meses y años.

La forma más fiable que pude encontrar fue encontrado aquí Add days to Javascript Date object, and also increment month

var dayOffset = 20; 
var millisecondOffset = dayOffset * 24 * 60 * 60 * 1000; 
december.setTime(december.getTime() + millisecondOffset); 

EDIT: A pesar de que ha trabajado para algunas personas, no creo que es del todo correcto. Yo recomendaría ir con una respuesta más popular o usar algo como http://momentjs.com/


+1

Esto no funcionará durante días con cambios en el horario de verano. Algunos días no son las 24 horas del día, algunos son 23, otros son 25. No sé qué resultados impredecibles tienes, pero agregar 1 a la propiedad del día (fecha) y dejar que la biblioteca funcione, el resto suele ser el mejor camino. – dalore

+0

Si solo está interesado en saber ** qué día ** podría usar esta solución, asegúrese de que sea la hora 12:00. Sin embargo, debe ignorar el tiempo del resultado, pero el día debería ser el correcto. –

+1

¿Cuáles son los resultados impredecibles? – Sam

0

encontré que JavaScript puede devolver una fecha correcta cuando se utiliza con el new Date(nYear, nMonth, nDate); lo largo de días de ese mes. Trate de ver el resultado de una variable dDate cuando se utiliza este:

var dDate = new Date(2012, 0, 34); // the result is 3 Feb 2012


Tengo una función SkipDate para compartir:

function DaysOfMonth(nYear, nMonth) { 
     switch (nMonth) { 
      case 0:  // January 
       return 31; break; 
      case 1:  // February 
       if ((nYear % 4) == 0) { 
        return 29; 
       } 
       else { 
        return 28; 
       }; 
       break; 
      case 2:  // March 
       return 31; break; 
      case 3:  // April 
       return 30; break; 
      case 4:  // May 
       return 31; break; 
      case 5:  // June 
       return 30; break; 
      case 6:  // July 
       return 31; break; 
      case 7:  // August 
       return 31; break; 
      case 8:  // September 
       return 30; break; 
      case 9:  // October 
       return 31; break; 
      case 10:  // November 
       return 30; break; 
      case 11:  // December 
       return 31; break; 
     } 
    }; 

    function SkipDate(dDate, skipDays) { 
     var nYear = dDate.getFullYear(); 
     var nMonth = dDate.getMonth(); 
     var nDate = dDate.getDate(); 
     var remainDays = skipDays; 
     var dRunDate = dDate; 

     while (remainDays > 0) { 
      remainDays_month = DaysOfMonth(nYear, nMonth) - nDate; 
      if (remainDays > remainDays_month) { 
       remainDays = remainDays - remainDays_month - 1; 
       nDate = 1; 
       if (nMonth < 11) { nMonth = nMonth + 1; } 
       else { 
        nMonth = 0; 
        nYear = nYear + 1; 
       }; 
      } 
      else { 
       nDate = nDate + remainDays; 
       remainDays = 0; 
      }; 
      dRunDate = Date(nYear, nMonth, nDate); 
     } 
     return new Date(nYear, nMonth, nDate); 
    }; 
+5

No es así como se calcula un año bisiesto; es necesario tener en cuenta% 4,% 100 y% 400 para estar en lo cierto. –

25

El prototipo de solución de Krishna Chytanya es muy agradable, pero necesita una mejora menor pero importante. Los días param se deben analizar como enteros para evitar cálculos extraños cuando days es una cadena como "1". (Necesitaba varias horas para averiguar, lo que salió mal en mi solicitud.)

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

Incluso si usted no utiliza esta función prototipo: Siempre asegúrese de tener un número entero al utilizar setDate().

59

Por qué no simplemente usar

function addDays(theDate, days) { 
    return new Date(theDate.getTime() + days*24*60*60*1000); 
} 

var newDate = addDays(new Date(), 5); 

o -5 para eliminar 5 días

+1

Para devolver una fecha formateada use este **** return (returndate.getMonth() + 1) + "/" + returndate.getDate() + "/" + returndate.getFullYear(); –

+7

esto fallaría dos veces al año debido al cambio de DTS. – jancha

+0

Según el comentario de Jancha con respecto a esta función: Agregar días sobre el límite de DTS le dará un resultado de fecha/hora incorrecto. Por lo tanto, lo mejor es usar una biblioteca de fechas establecida como momentjs. – br2000

44

Esto es por 5 días:

var myDate = new Date(new Date().getTime()+(5*24*60*60*1000)); 

Usted no necesita jQuery, puede hacerlo en Javascript, espero que lo entiendas

+3

Creo que esta es la solución más limpia que encontré. Gracias – zhihong

+0

Para expandir además, para agregar 180 minutos 'nueva Fecha (nueva Fecha(). GetTime() + (180 * 60 * 1000))' – Cryptopat

8

solución JS puro, con fecha formateada formato AAAA-MM-DD

var someDate = new Date('2014-05-14'); 
 
someDate.setDate(someDate.getDate() + 15); //number of days to add, e.x. 15 days 
 
var dateFormated = someDate.toISOString().substr(0,10);

+1

Excelente ... esp. la forma de formatear que funciona perfectamente en mi caso, sin embargo, puede no ser una solución genérica. – Fr0zenFyr

6
Date.prototype.addDays = function(days) 
{ 
    var dat = new Date(this.valueOf() + days * 24 * 60 * 60 * 1000); 
    return dat; 
} 
3

Si no son necesarios los tiempos a la fecha, a continuación, sólo tiene que utilizar los métodos del objeto fecha a extrae el mes, el año y el día y agrega "n" cantidad de días a la parte del día.

var n=5; //number of days to add. 
var today=new Date(); //Today's Date 
var requiredDate=new Date(today.getFullYear(),today.getMonth(),today.getDate()+n) 

Ref: Mozilla Javascript GetDate

Editar: Ref: Mozilla JavaScript Date

+1

Si ejecuta una función getDate() en requiredDate, el valor devuelto será incorrecto. –

+1

Realmente no @CyrilleArmanger: mira esto http://jsfiddle.net/sahiljambhekar/6u7caake/. También en la variable 'requiredDate' si ejecuta el método getDate(), devolverá el día del mes, que también es correcto. Entonces, por favor, elimine el voto a favor como está trabajando código –

+3

¿Qué pasará cuando today.getDate() === 30? –

0

Aquí es una solución que funcionó para mí.

function calduedate(ndays){ 

    var newdt = new Date(); var chrday; var chrmnth; 
    newdt.setDate(newdt.getDate() + parseInt(ndays)); 

    var newdate = newdt.getFullYear(); 
    if(newdt.getMonth() < 10){ 
     newdate = newdate+'-'+'0'+newdt.getMonth(); 
    }else{ 
     newdate = newdate+'-'+newdt.getMonth(); 
    } 
    if(newdt.getDate() < 10){ 
     newdate = newdate+'-'+'0'+newdt.getDate(); 
    }else{ 
     newdate = newdate+'-'+newdt.getDate(); 
    } 

    alert("newdate="+newdate); 

} 
3

function addDays(n){ 
 
    var t = new Date(); 
 
    t.setDate(t.getDate() + n); 
 
    var month = "0"+(t.getMonth()+1); 
 
    var date = "0"+t.getDate(); 
 
    month = month.slice(-2); 
 
    date = date.slice(-2); 
 
    var date = date +"/"+month +"/"+t.getFullYear(); 
 
    alert(date); 
 
} 
 

 
addDays(5);

25

Moment.js

Instalar moment.js de here.

NPM: $ npm i --save moment

Bower: $ bower install --save moment

A continuación,

var date = moment() 
      .add(2,'d') //replace 2 with number of days you want to add 
      .toDate(); //convert it to a Javascript Date Object if you like 

Link Ref: http://momentjs.com/docs/#/manipulating/add/

Moment.js es una librería Javascript increíble para administrar objetos Date y extremadamente livianos al 40kb.

Buena suerte.

0

puede probar esto y no necesita jQuery: timeSolver.js

Por ejemplo, añadir 5 día en la actualidad:

var newDay = timeSolver.add(new Date(),5,"day"); 

También puede agregar por horas, días ... etc. Consulte para obtener más información.

+1

... pero necesitas timeSolver? –

Cuestiones relacionadas