Cara menentukan satu tahun dari sekarang di Javascript


111

Saya mencoba untuk mendapatkan satu tahun dari tanggal sekarang, dan itu tidak berhasil.

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

Keluaran:

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)

Tahun memiliki Dec 22 112- ?? Bulan ditampilkan dengan benar Jan 22 2012.

Jika Anda ingin mengotak-atiknya, http://jsbin.com/alezaj/edit#javascript,html,live . Ini ada di Chrome dan Firefox.

Terima kasih!

Jawaban:


88

Anda harus menggunakan getFullYear()bukan getYear(). getYear()mengembalikan tahun aktual dikurangi 1900 (dan karenanya cukup tidak berguna).

Jadi tanggal yang menandai tepat satu tahun dari saat ini adalah:

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

Perhatikan bahwa tanggal akan disesuaikan jika Anda melakukannya pada 29 Februari.

Demikian pula, Anda bisa mendapatkan tanggal sebulan dari sekarang melalui getMonth()dan setMonth(). Anda tidak perlu khawatir tentang "bergulir" dari tahun ini ke tahun depan jika Anda melakukannya pada bulan Desember; tanggal akan disesuaikan secara otomatis. Hal yang sama berlaku untuk hari-bulan melalui getDate()dan setDate().


1
Bagi siapa pun yang bertanya-tanya bagaimana ini berhubungan dengan tahun kabisat, saya melakukan ini di konsol Firefox ... >> x = Tanggal baru ('2000-02-29') -> Tanggal 2000-02-29T00: 00: 00.000Z >> x.setYear (2001) -> 983404800000 >> x.toLocaleFormat ('% d-% b-% Y') -> "01-Mar-2001"
Ivan

29
Bukankah ini lucu? Untuk mendapatkan tanggal satu tahun dari sekarang dalam javascript seseorang perlu menulis: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

205

Ini akan membuat Datetepat satu tahun ke depan hanya dengan satu baris. Pertama kita dapatkan fullYearfrom a new Date, increment it, atur itu sebagai tahun a new Date. Anda mungkin berpikir kami akan selesai di sana, tetapi jika kami menghentikannya akan mengembalikan stempel waktu, bukan Dateobjek jadi kami membungkus semuanya dalam Datekonstruktor.

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

13
setYear()tidak digunakan lagi , setFullYear()sebaiknya digunakan sebagai gantinya.
tsauerwein

1
Satu liner tanpa variabel perantara untuk dialokasikan! Luar biasa!
theUtherSide

1
ini tidak akan menangani jam, menit dan detik, ini akan diatur ke waktu saat ini
Dheeraj

32

Seperti yang setYear()sudah tidak berlaku lagi, varian yang benar adalah:

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

Semua contoh mengembalikan stempel waktu Unix, jika Anda ingin mendapatkan Dateobjek - cukup bungkus dengan yang lainnew Date(...)


6

Menggunakan beberapa jawaban di halaman ini dan di sini , saya mendapatkan jawaban saya sendiri karena tidak satu pun dari jawaban ini yang sepenuhnya menyelesaikannya untuk saya.

Inilah inti dari itu

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

Dan di sini ada JSFiddle yang memiliki contoh yang berfungsi: https://jsfiddle.net/wavesailor/g9a6qqq5/


1
untuk apa expireDate.getDate () - 1?
Uzer

5

Gunakan ini:

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

1

Gunakan setFullyear seperti yang telah diposting orang lain, tetapi perlu diketahui bahwa ini mengembalikan nilai stempel waktu, bukan objek tanggal. Ini juga merupakan kandidat yang baik untuk menambahkan fungsionalitas melalui prototipe. Ini membawa kita ke pola berikut:

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

Dengan cara yang sangat sederhana. gunakan kode ini.

// 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
Mengapa JQuery mengangkat kepalanya yang jelek di sini? JQuery! = JS
Uzer
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.