Cómo determinar dentro de un año en Javascript

111

Estoy tratando de tener un año a partir de la fecha de ahora y no funciona.

JS:

var now = new Date();

var oneYr = new Date();
oneYr.setYear(now.getYear() + 1);
$("#yearFromNow").append(oneYr.toString());

var oneMonth = new Date();
oneMonth.setMonth(now.getMonth() + 1);
$("#monthFromNow").append(oneMonth.toString());

Salida:

one mo. = Thu Dec 22 112 15:16:01 GMT-0500 (Eastern Standard Time)

one yr. = Sun Jan 22 2012 15:16:01 GMT-0500 (Eastern Standard Time)

El año tiene Dec 22 112... ?? El mes se muestra correctamente Jan 22 2012.

Si quieres jugar con él, http://jsbin.com/alezaj/edit#javascript,html,live . Esto está en Chrome y Firefox.

¡Gracias!

Ian Davis
fuente

Respuestas:

88

Deberías usar en getFullYear()lugar de getYear(). getYear()devuelve el año real menos 1900 (por lo que es bastante inútil).

Por lo tanto, una fecha que marque exactamente un año desde el momento presente sería:

var oneYearFromNow = new Date();
oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1);

Tenga en cuenta que la fecha se ajustará si lo hace el 29 de febrero.

Del mismo modo, puede obtener una fecha dentro de un mes a través de getMonth()y setMonth(). No tiene que preocuparse por "pasar" del año actual al año siguiente si lo hace en diciembre; la fecha se ajustará automáticamente. Lo mismo ocurre con el día del mes mediante getDate()y setDate().

Puntiagudo
fuente
1
Para cualquiera que se pregunte cómo se manejan los años bisiestos, hice esto en una consola Firefox ... >> x = new Date ('2000-02-29') -> Date 2000-02-29T00: 00: 00.000Z >> x.setYear (2001) -> 983404800000 >> x.toLocaleFormat ('% d-% b-% Y') -> "01-Mar-2001"
Ivan
29
¿No es gracioso? Para obtener una fecha dentro de un año en javascript, es necesario escribir: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM
205

Esto creará Dateexactamente un año en el futuro con solo una línea. Primero obtenemos el fullYearde a new Date, lo incrementamos, lo configuramos como el año de a new Date. Podrías pensar que terminamos ahí, pero si nos detuvimos, devolvería una marca de tiempo, no un Dateobjeto, por lo que envolvemos todo en un Dateconstructor.

new Date(new Date().setFullYear(new Date().getFullYear() + 1))
JP DeVries
fuente
13
setYear()está obsoleto , setFullYear()debería utilizarse en su lugar.
tsauerwein
1
¡Un trazador de líneas sin variables intermedias para asignar! ¡Excelente!
theUtherSide
1
esto no manejará las horas, minutos y segundos, se configurará a la hora actual
Dheeraj
32

Como setYear()está obsoleto, la variante correcta es:

// plus 1 year
new Date().setFullYear(new Date().getFullYear() + 1)
// plus 1 month
new Date().setMonth(new Date().getMonth() + 1)
// plus 1 day
new Date().setDate(new Date().getDate() + 1)

Todos los ejemplos devuelven la marca de tiempo de Unix, si desea obtener el Dateobjeto, simplemente envuélvalo con otronew Date(...)

pliashkou
fuente
6

Usando algunas de las respuestas en esta página y aquí , se me ocurrió mi propia respuesta, ya que ninguna de estas respuestas me resolvió por completo.

Aquí está el quid de ello

var startDate = "27 Apr 2017";
var numOfYears = 1;
var expireDate = new Date(startDate);
expireDate.setFullYear(expireDate.getFullYear() + numOfYears);
expireDate.setDate(expireDate.getDate() -1);

Y aquí un JSFiddle que tiene un ejemplo de trabajo: https://jsfiddle.net/wavesailor/g9a6qqq5/

Marinero de olas
fuente
1
¿Para qué es expireDate.getDate () - 1?
Uzer
5

Utilizar este:

var startDate = new Date();
    startDate.setFullYear(startDate.getFullYear() - 1);
Abdus Salam Azad
fuente
1

Use setFullyear como otros han publicado, pero tenga en cuenta que esto devuelve un valor de marca de tiempo, no un objeto de fecha. También es un buen candidato en mi humilde opinión para agregar funcionalidad a través del prototipo. Esto nos lleva al siguiente patrón:

Date.prototype.addYears = function(n) {
    var now = new Date();
    return new Date(now.setFullYear(now.getFullYear() + n));
};

console.log('Year from now is', new Date().addYears(1));
James Westgate
fuente
0

De forma muy sencilla. usa este código.

// define function 
function nextYearDate(date1) {
    var date2 = new Date(date1);
    var date3 = date2.setDate(date2.getDate() - 1);
    var date = new Date(date3);
    var day = date.getDate();
    var month = date.getMonth()+1;
    var year = date.getFullYear()+1;
    var newdate = year + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day;
    $("#next_date").val(newdate);
}
// call function.
<input type="date" name="current_date" id="current_date" value="" onblur="nextYearDate(this.value);" />

<input type="date" name="next_date" id="next_date" value="" onblur="nextYearDate(this.value);" />
Nadeem Haidar
fuente
1
¿Por qué diablos JQuery asoma su fea cabeza aquí? JQuery! = JS
Uzer