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!

Ian Davis
sumber

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

Runcing
sumber
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))
JP DeVries
sumber
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(...)

pliashkou
sumber
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/

Wavesailor
sumber
1
untuk apa expireDate.getDate () - 1?
Uzer
5

Gunakan ini:

var startDate = new Date();
    startDate.setFullYear(startDate.getFullYear() - 1);
Abdus Salam Azad
sumber
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));
James Westgate
sumber
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);" />
Nadeem Haidar
sumber
1
Mengapa JQuery mengangkat kepalanya yang jelek di sini? JQuery! = JS
Uzer