Javascript'te bundan bir yıl sonra nasıl belirlenir


112

Şu andan itibaren bir yıl almaya çalışıyorum ve işe yaramıyor.

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());

Çıktı:

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)

Yıl Dec 22 112- ?? Ay doğru şekilde görüntüleniyor Jan 22 2012.

Düzeltmek istiyorsanız, http://jsbin.com/alezaj/edit#javascript,html,live . Bu, Chrome ve Firefox'ta.

Teşekkürler!

Yanıtlar:


89

Bunun getFullYear()yerine kullanmalısınız getYear(). getYear()fiili yılı eksi 1900 döndürür (ve bu nedenle oldukça kullanışsızdır).

Böylece, şimdiki andan itibaren tam olarak bir yılı işaretleyen bir tarih şöyle olacaktır:

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

Bunu 29 Şubat'ta yaparsanız tarihin ayarlanacağını unutmayın.

Benzer şekilde, şu andan itibaren getMonth()ve üzerinden bir ay olan bir tarih alabilirsiniz setMonth(). Aralık ayında yaparsanız, cari yıldan gelecek yıla "geçiş" konusunda endişelenmenize gerek yok; tarih otomatik olarak ayarlanacaktır. Aynısı getDate()ve üzerinden ayın günü için de geçerlidir setDate().


1
Artık yıllarla nasıl başa çıktığını merak eden herkes için bunu bir Firefox konsolunda yaptım ... >> x = new Date ('2000-02-29') -> Date 2000-02-29T00: 00: 00.000Z >> x.setYear (2001) -> 983404800000 >> x.toLocaleFormat ('% d-% b-% Y') -> "01-Mart-2001"
Ivan

29
Bu çok komik değil mi? Bundan bir yıl sonra javascript'te bir tarih almak için şunu yazmanız gerekir: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

206

Bu Date, gelecekte sadece bir satırla tam bir yıl yaratacaktır . İlk aldığımız fullYearbir gelen new Datebir yılı olarak, set bir artıracaktır, new Date. Orada işimizin bittiğini düşünebilirsiniz, ancak durdurursak bir zaman damgası döndürür, bir Datenesne değil, böylece her şeyi bir Datekurucuya sararız.

new Date(new Date().setFullYear(new Date().getFullYear() + 1))

13
setYear()kullanımdan kaldırıldı , setFullYear()bunun yerine kullanılmalı.
tsauerwein

1
Ayrılacak ara değişkenler içermeyen tek satır! Mükemmel!
theUtherSide

1
bu saat, dakika ve saniyeyi işlemez, şimdiki saate ayarlanacaktır
Dheeraj

32

Kullanımdan setYear()kaldırıldığı gibi, doğru varyant:

// 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)

DateNesne almak istiyorsanız tüm örnekler Unix zaman damgasını döndürür - sadece başka bir nesneye sarınnew Date(...)


6

Bu sayfadaki ve buradaki cevaplardan bazılarını kullanarak , bu cevapların hiçbiri benim için tam olarak çözmediği için kendi cevabımı buldum.

İşte işin püf noktası

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

Ve işte çalışan bir örneği olan bir JSFiddle: https://jsfiddle.net/wavesailor/g9a6qqq5/


1
expireDate.getDate () - 1 ne için?
Uzer

5

Bunu kullan:

var startDate = new Date();
    startDate.setFullYear(startDate.getFullYear() - 1);

1

SetFullyear'ı diğerlerinin gönderdiği gibi kullanın, ancak bunun bir tarih nesnesi değil bir zaman damgası değeri döndürdüğünü unutmayın. Aynı zamanda prototip aracılığıyla işlevsellik eklemek için iyi bir aday imho. Bu bizi aşağıdaki kalıba götürür:

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));

0

Çok basit bir şekilde. bu kodu kullanın.

// 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);" />

1
JQuery neden burada çirkin kafasını yetiştiriyor? JQuery! = JS
Uzer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.