Cách xác định một năm kể từ bây giờ trong Javascript


111

Tôi đang cố gắng để có một năm kể từ ngày hôm nay, nhưng nó không hoạt động.

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

Đầu ra:

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)

Năm có Dec 22 112- ?? Tháng được hiển thị chính xác Jan 22 2012.

Nếu bạn muốn mày mò, hãy http://jsbin.com/alezaj/edit#javascript,html,live . Đây là trong Chrome và Firefox.

Cảm ơn!

Câu trả lời:


88

Bạn nên sử dụng getFullYear()thay vì getYear(). getYear()trả về năm thực tế trừ đi 1900 (và như vậy là khá vô dụng).

Vì vậy, một ngày đánh dấu chính xác một năm kể từ thời điểm hiện tại sẽ là:

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

Lưu ý rằng ngày sẽ được điều chỉnh nếu bạn làm điều đó vào ngày 29 tháng 2.

Tương tự, bạn có thể nhận được một ngày sau một tháng kể từ bây giờ thông qua getMonth()setMonth(). Bạn không phải lo lắng về việc “lăn lộn” từ năm nay sang năm sau nếu làm vào tháng 12; ngày sẽ được điều chỉnh tự động. Tương tự đối với ngày trong tháng qua getDate()setDate().


1
Đối với bất kỳ ai tự hỏi làm thế nào nó đối phó với năm nhuận, tôi đã làm điều này trong bảng điều khiển Firefox ... >> x = new Date ('2000-02-29') -> Date 2000-02-29T00: 00: 00.000Z >> x.setYear (2001) -> 983404800000 >> x.toLocaleFormat ('% d-% b-% Y') -> "01-03-2001"
Ivan

29
Điều này không phải là vui nhộn? Để có một ngày một năm kể từ bây giờ trong javascript, người ta cần viết: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

205

Điều này sẽ tạo ra Dateđúng một năm trong tương lai chỉ với một dòng. Đầu tiên, chúng ta lấy fullYeartừ a new Date, tăng dần nó, đặt nó là năm của a new Date. Bạn có thể nghĩ rằng chúng tôi đã hoàn thành ở đó, nhưng nếu chúng tôi dừng nó sẽ trả về một dấu thời gian, không phải một Dateđối tượng, vì vậy chúng tôi bọc toàn bộ mọi thứ trong một hàm Datetạo.

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

13
setYear()đang bị phản đối , setFullYear()nên được sử dụng để thay thế.
tsauerwein

1
Một lớp lót không có biến trung gian để phân bổ! Thông minh!
theUtherSide

1
điều này sẽ không xử lý giờ, phút và giây, nó sẽ được đặt thành thời gian hiện tại
Dheeraj

32

setYear()không được dùng nữa, biến thể đúng là:

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

Tất cả các ví dụ đều trả về dấu thời gian Unix, nếu bạn muốn lấy Dateđối tượng - chỉ cần bọc nó bằng một đối tượng khácnew Date(...)


6

Sử dụng một số câu trả lời trên trang này và tại đây , tôi đã đưa ra câu trả lời cho riêng mình vì không câu trả lời nào trong số này giải quyết được hoàn toàn cho tôi.

Đây là mấu chốt của nó

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

Và đây aa JSFiddle có một ví dụ hoạt động: https://jsfiddle.net/wavesailor/g9a6qqq5/


1
expireDate.getDate () - 1 để làm gì?
Uzer

5

Dùng cái này:

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

1

Sử dụng setFullyear như những người khác đã đăng nhưng lưu ý điều này trả về giá trị dấu thời gian không phải đối tượng ngày tháng. Nó cũng là một ứng cử viên sáng giá để thêm chức năng thông qua nguyên mẫu. Điều này dẫn chúng ta đến mô hình sau:

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

Theo cách rất đơn giản. sử dụng mã này.

// 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
Tại sao JQuery lại nuôi cái đầu xấu xí của nó ở đây? JQuery! = JS
Uzer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.