Tôi cần tăng giá trị ngày lên một ngày bằng JavaScript.
Ví dụ: tôi có giá trị ngày 2010-09-11 và tôi cần lưu trữ ngày của ngày tiếp theo trong một biến JavaScript.
Làm thế nào tôi có thể tăng một ngày một ngày?
Tôi cần tăng giá trị ngày lên một ngày bằng JavaScript.
Ví dụ: tôi có giá trị ngày 2010-09-11 và tôi cần lưu trữ ngày của ngày tiếp theo trong một biến JavaScript.
Làm thế nào tôi có thể tăng một ngày một ngày?
Câu trả lời:
Ba lựa chọn cho bạn:
Date
đối tượng JavaScript (không có thư viện):Câu trả lời trước đây của tôi cho # 1 là sai (đã thêm 24 giờ, không tính đến việc chuyển đổi sang và từ thời gian tiết kiệm ánh sáng ban ngày; Clever Human chỉ ra rằng nó sẽ thất bại với ngày 7 tháng 11 năm 2010 ở múi giờ phương Đông). Thay vào đó, câu trả lời của Jigar là cách chính xác để làm điều này mà không cần thư viện:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
Điều này hoạt động ngay cả vào ngày cuối cùng của tháng (hoặc năm), vì đối tượng ngày JavaScript rất thông minh về cuộn qua:
(Câu trả lời này hiện đang được chấp nhận, vì vậy tôi không thể xóa nó. Trước khi được chấp nhận, tôi đã đề xuất với OP, họ chấp nhận Jigar's, nhưng có lẽ họ đã chấp nhận câu này cho các mục số 2 hoặc # 3 trong danh sách.)
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Coi chừng add
sửa đổi thể hiện mà bạn gọi nó, thay vì trả về một thể hiện mới, vì vậy today.add(1, 'days')
sẽ sửa đổi today
. Đó là lý do tại sao chúng ta bắt đầu với một bản sao nhân bản var tomorrow = ...
.)
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
Date
tạo ( new Date(year, month, date)
); xem phần 15.9.2.1 của thông số kỹ thuật ; nếu bạn muốn chấp nhận một loạt các định dạng, chắc chắn hãy xem DateJS .
Date.parse
(trả về một số mili giây mà sau đó bạn có thể đưa vào new Date(ms)
). Nhưng hãy cẩn thận, có thể thay đổi từ trình duyệt để trình duyệt. Cho đến gần đây, việc triển khai có thể làm bất cứ điều gì họ muốn Date.parse
. Đặc điểm kỹ thuật phiên bản thứ 5 mới hiện có định dạng tối thiểu phải được chấp nhận, nhưng tôi chưa tính đến điều đó.
x = new Date(); x2 = new Date(x.getTime() + 1000)
, trong đó 1000 là gia số mili giây.
Date
đối tượng là đột biến. Bạn đang lưu trữ cùng một Date
đối tượng ba lần trong mảng. Nếu bạn muốn có ba Date
đối tượng khác nhau , bạn phải tạo ba đối tượng:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
new Date("2009-09-11")
nhưng Firefox thì không. Tôi nghĩ rằng hầu hết các trình duyệt chấp nhận new Date("2009/09/11")
vì vậy một giải pháp dễ dàng sẽ được var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.
-
bằng /
và hy vọng rằng các trình duyệt sẽ chấp nhận nó, sẽ chia chuỗi thành các phần: var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);
Lưu ý rằng chúng tôi đang sử dụng m-1
ở đây, vì tháng javascript là giá trị enum (tháng 1 là 0, không phải 1) và d+1
bởi vì chúng tôi đang thực hiện tăng dần trong bài tập ban đầu (nó sẽ tự động sửa cho ngày 29 tháng 2, v.v.)
Không có ví dụ nào trong câu trả lời này dường như hoạt động với các ngày điều chỉnh Giờ tiết kiệm ánh sáng ban ngày. Vào những ngày đó, số giờ trong một ngày không phải là 24 (chúng là 23 hoặc 25, tùy thuộc vào việc bạn đang "tiến về phía trước" hay "quay trở lại".)
Các tài khoản javascript AddDays dưới đây cho thời gian tiết kiệm ánh sáng ban ngày:
function addDays(date, amount) {
var tzOff = date.getTimezoneOffset() * 60 * 1000,
t = date.getTime(),
d = new Date(),
tzOff2;
t += (1000 * 60 * 60 * 24) * amount;
d.setTime(t);
tzOff2 = d.getTimezoneOffset() * 60 * 1000;
if (tzOff != tzOff2) {
var diff = tzOff2 - tzOff;
t += diff;
d.setTime(t);
}
return d;
}
Dưới đây là các bài kiểm tra tôi đã sử dụng để kiểm tra chức năng:
var d = new Date(2010,10,7);
var d2 = AddDays(d, 1);
document.write(d.toString() + "<br />" + d2.toString());
d = new Date(2010,10,8);
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, 1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
Cách dễ nhất là chuyển đổi sang mili giây và thêm 1000 * 60 * 60 * 24 mili giây, ví dụ:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
nhưng nó thực sự tương tự như getTime()
/ setTime()
, thực sự.
new Date(Date.now()+1000*60*60*24);
Trước tiên bạn cần phân tích chuỗi của mình trước khi làm theo đề xuất của người khác:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Nếu bạn muốn nó trở lại cùng định dạng một lần nữa, bạn sẽ phải thực hiện "thủ công":
var y = myDate.getFullYear(),
m = myDate.getMonth() + 1, // january is month 0 in javascript
d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");
Nhưng tôi khuyên bạn nên lấy Date.js như được đề cập trong các câu trả lời khác, điều đó sẽ giúp bạn rất nhiều .
Tôi cảm thấy rằng không có gì an toàn hơn .getTime()
và .setTime()
, vì vậy đây cũng là điều tốt nhất và hiệu quả.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
đối với Ngày không hợp lệ (như 31 + 1) quá nguy hiểm và tùy thuộc vào việc triển khai trình duyệt.
Nhận giá trị chuỗi của ngày bằng phương thức dateObj.toJSON () Tham khảo: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Slice ngày từ giá trị và sau đó tăng theo số ngày bạn muốn.
var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
Date.prototype.AddDays = function (days) {
days = parseInt(days, 10);
return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}
Thí dụ
var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));
Kết quả
2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
Không hoàn toàn chắc chắn nếu đó là BUG (Đã kiểm tra Firefox 32.0.3 và Chrome 38.0.2125.101), nhưng đoạn mã sau sẽ thất bại ở Brazil (-3 GMT):
Date.prototype.shiftDays = function(days){
days = parseInt(days, 10);
this.setDate(this.getDate() + days);
return this;
}
$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
Kết quả:
Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200
Thêm một giờ vào ngày, sẽ làm cho nó hoạt động hoàn hảo (nhưng không giải quyết được vấn đề).
$date = new Date(2014, 9, 16,0,1,1);
Kết quả:
Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
Kết quả trong một chuỗi đại diện của ngày mai. Sử dụng Ngày mới () để có được ngày hôm nay, thêm một ngày bằng Date.getDate () và Date.setDate () và chuyển đổi đối tượng Ngày thành chuỗi.
const tomorrow = () => {
let t = new Date();
t.setDate(t.getDate() + 1);
return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
t.getDate()
).padStart(2, '0')}`;
};
tomorrow();
Thông qua JS gốc, để thêm một ngày bạn có thể làm như sau:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Một tùy chọn khác là sử dụng moment
thư viện:
const date = moment().add(14, "days").toDate()
Tăng thời gian nhận biết tiết kiệm múi giờ / ngày cho các ngày JavaScript:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}