Javascriptで1年後を決定する方法


111

現在の日付から1年取得しようとしていますが、機能しません。

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

出力:

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)

今年はDec 22 112-?? 月は正しく表示されJan 22 2012ます。

これをいじくり回したい場合は、http: //jsbin.com/alezaj/edit#javascript,html,liveを使用してください。これはChromeとFirefoxにあります。

ありがとう!

回答:


88

getFullYear()代わりに使用する必要がありますgetYear()getYear()実際の年から1900を引いた数を返します(そのため、ほとんど役に立ちません)。

したがって、現在からちょうど1年後の日付は次のようになります。

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

2月29日に日付を調整すると、日付が調整されます。

同様に、とを介してgetMonth()、今から1か月後の日付を取得できますsetMonth()。12月に行う場合、現在の年から翌年に「ロールオーバー」することを心配する必要はありません。日付は自動的に調整されます。同じことは、getDate()とを介した月の日にも当てはまりますsetDate()


1
うるう年をどのように扱うか疑問に思う方のために、Firefoxコンソールでこれを行いました... >> x = new Date( '2000-02-29')-> Date 2000-02-29T00:00:00.000Z >> x.setYear(2001)-> 983404800000 >> x.toLocaleFormat( '%d-%b-%Y')-> "2001-Mar-2001"
Ivan

29
これは陽気ではありませんか?書き込みにjavascriptの1のニーズに今から日付1年を取得するには: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

205

これにより、Date1行だけで正確に1年後が作成されます。まず、fullYearからを取得し、new Dateそれをインクリメントし、それをの年として設定しnew Dateます。あなたは私たちがそこで行われると思うかもしれませんが、それを停止した場合、Dateオブジェクトではなくタイムスタンプを返すので、全体をDateコンストラクタます。

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

13
setYear()される非推奨setFullYear()代わりに使用する必要があります。
tsauerwein 2015

1
割り当てる中間変数のない1つのライナー!優れた!
theUtherSide

1
これは時間、分、秒を処理せず、現在の時刻に設定されます
Dheeraj

32

setYear()推奨されていません、正しい変異体です:

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

Dateオブジェクトを取得したい場合、すべての例はUnixタイムスタンプを返します-別のオブジェクトでラップするだけですnew Date(...)


6

このページとここのいくつかの回答を使用して、私は自分の答えを思い付きました。

ここにそれの核心があります

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

そして、ここに実際の例があるJSFiddle:https ://jsfiddle.net/wavesailor/g9a6qqq5/


1
何がexpireDate.getDate()-1のために?
Uzer


1

他のユーザーが投稿したsetFullyearを使用しますが、これは日付オブジェクトではなくタイムスタンプ値を返すことに注意してください。また、プロトタイプを介して機能を追加することもできます。これにより、次のパターンが得られます。

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

非常に簡単な方法で。このコードを使用します。

// 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はここで醜い頭を育てているのですか?JQuery!= JS
Uzer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.