วิธีกำหนดหนึ่งปีนับจากนี้ใน Javascript


113

ฉันพยายามที่จะได้รับหนึ่งปีนับจากวันนี้และมันไม่ได้ผล

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

ขอบคุณ!

คำตอบ:


91

คุณควรใช้getFullYear()แทนgetYear(). getYear()ส่งคืนปีจริงลบ 1900 (และก็ไร้ประโยชน์พอสมควร)

ดังนั้นวันที่ที่ทำเครื่องหมายหนึ่งปีจากช่วงเวลาปัจจุบันจะเป็น:

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

โปรดทราบว่าวันที่จะถูกปรับหากคุณทำเช่นนั้นในวันที่ 29 กุมภาพันธ์

ทำนองเดียวกันคุณสามารถได้รับวันที่หนึ่งเดือนนับจากนี้ผ่านทางและgetMonth() setMonth()คุณไม่ต้องกังวลว่าจะ "เลื่อน" จากปีปัจจุบันไปสู่ปีถัดไปหากคุณทำในเดือนธันวาคม วันที่จะถูกปรับโดยอัตโนมัติ เดียวกันจะไปสำหรับวันของเดือนผ่านและgetDate()setDate()


1
สำหรับใครที่สงสัยว่ามันเกี่ยวข้องกับปีอธิกสุรทินได้อย่างไรฉันทำสิ่งนี้ในคอนโซล Firefox ... >> x = new Date ('2000-02-29') -> วันที่ 2000-02-29T00: 00: 00.000Z >> x.setYear (2001) -> 983404800000 >> x.toLocaleFormat ('% d-% b-% Y') -> "01-Mar-2001"
Ivan

29
นี่ไม่เฮฮาเหรอ? ในการรับวันที่หนึ่งปีจากนี้ใน javascript เราต้องเขียน: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

209

สิ่งนี้จะสร้างDateหนึ่งปีในอนาคตโดยใช้เพียงบรรทัดเดียว ครั้งแรกที่เราได้รับfullYearจากnew Date, new Dateเพิ่มมันชุดว่าเป็นปีแห่งการให้ คุณอาจคิดว่าเราจะเสร็จแล้ว แต่ถ้าเราหยุดมันจะส่งคืนการประทับเวลาไม่ใช่Dateวัตถุดังนั้นเราจึงรวมสิ่งทั้งหมดไว้ในตัวDateสร้าง

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

13
setYear()จะเลิก , setFullYear()ควรจะนำมาใช้แทน
tsauerwein

1
ซับเดียวไม่มีตัวแปรกลางมาจัดสรร! ยอดเยี่ยม!
theUtherSide

1
สิ่งนี้จะไม่รองรับชั่วโมงนาทีและวินาทีโดยจะตั้งเป็นเวลาปัจจุบัน
Dheeraj

33

เนื่องจาก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)

ตัวอย่างทั้งหมดส่งคืนการประทับเวลา Unix หากคุณต้องการรับDateวัตถุ - เพียงห่อด้วยอีกอัน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.