Thêm 10 giây vào một ngày


253

Làm cách nào để thêm 10 giây vào đối tượng ngày JavaScript?

Một cái gì đó như thế này:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;

4
Hoặc nếu bạn muốn thực hiện thông qua hàm tạo - Ngày mới (Ngày mới (). GetTime () + 10000)
John Strickler

Câu trả lời:


416

Cũng có một setSecondsphương pháp:

var t = new Date();
t.setSeconds(t.getSeconds() + 10);

Để biết danh sách các Date chức năng khác , bạn nên kiểm tra MDN


setSeconds sẽ xử lý chính xác các trường hợp bao quanh:

var d;
d = new Date('2014-01-01 10:11:55');
alert(d.getMinutes() + ':' + d.getSeconds()); //11:55
d.setSeconds(d.getSeconds() + 10);
alert(d.getMinutes() + ':0' + d.getSeconds()); //12:05


3
Coi chừng, cài đặt Nodejs của tôi trả về d.getSeconds () dưới dạng chuỗi. Tôi đã phải thay đổi điều này thành (+ d.getSeconds ()) Dấu cộng đơn chuyển đổi một chuỗi thành một số. Có lẽ rõ ràng hơn một chút sẽ là 1 * d.getSeconds ()
tqwhite

1
@tqwhite, typeof new Date().getSeconds()trả về 'number'trong nút, vì vậy tôi nghĩ rằng bạn có thể có các vấn đề khác (trừ khi bạn đang ở phiên bản lỗi thời của nút hoặc một cái gì đó).
zzzzBov

2
Hãy thử làm d.setSeconds(d.getSeconds() - 92);và bạn sẽ kết thúc với chênh lệch 2'32 "thay vì 1'32". Các giải pháp với new Date(d.getTime() - 92*1000);công trình tuy nhiên!
Rafalon

1
Dựa vào hành vi không có giấy tờ (setSeconds (70) sẽ tăng số phút lên một và đặt giây thành 10) có vẻ như là một thực tế thường tồi. Các câu trả lời (hiện tại tiếp theo) chỉ vào Date.getTime () + <số mili giây cần thêm> dường như là cách tiếp cận được dự định và hỗ trợ, và sẽ rõ ràng đối với hầu hết các lập trình viên đến từ các ngôn ngữ khác nhau mà không có kiến ​​thức bách khoa về các sắc thái không được ghi chép của từng sắc thái công cụ JavaScript cụ thể.
Tom Dibble

1
Một vấn đề có thể xảy ra với các múi giờ lịch sử, xem các bình luận bên dưới câu trả lời của @ Ron: stackoverflow.com/a/17267937/198797 . Có thể không phải là một kịch bản phổ biến nhưng dù sao cũng là một vấn đề.
tsTable

110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);

33
... và lý do bạn đã thêm 10000 là vì ngày Javascript hoạt động tính bằng mili giây, tức là 10000 = 10 * 1000
psiphi75

1
Và dấu + trước timeObject là cần thiết vì nó biến timeObject thành một số. Vì vậy, nó giống như timeObject.getTime () trong câu trả lời của Ron
James

1
JavaScript thật khó chịu. Các API ban đầu này hơi sai sót.
usr

62

Chỉ dành cho những kẻ cuồng biểu diễn trong số chúng ta.

dành thời gian

var d = new Date('2014-01-01 10:11:55');
d = new Date(d.getTime() + 10000);

5.196.949 Ops / giây, nhanh nhất


setSeconds

var d = new Date('2014-01-01 10:11:55');
d.setSeconds(d.getSeconds() + 10);

2.936.604 Ops / giây, chậm hơn 43%


khoảnh khắc

var d = new moment('2014-01-01 10:11:55');
d = d.add(10, 'seconds');

22,549 Ops / giây, chậm hơn 100%


Vì vậy, có lẽ nó ít người đọc nhất (không tệ lắm) nhưng là cách nhanh nhất :)

kiểm tra trực tuyến jspref


3
Cám ơn các chi tiết, rất hữu ích :)
Dean

58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Ngoài ra, vui lòng tham khảo: Làm cách nào để thêm 30 phút vào đối tượng Ngày JavaScript?


7
Trong tất cả các câu trả lời sai ở đây, đây là câu trả lời đúng.
Cory Mawhorter

Vâng, đây là câu trả lời chính xác. Thật không may, Google đang đề cập đến Câu hỏi này nếu tìm kiếm "ngày javascript thêm giây" và câu trả lời được bình chọn nhiều nhất là sai.
Philipp Gächter

2
Ai đó có thể vui lòng giải thích câu trả lời được chọn (hiện tại từ @zzzzBov) đang làm sai không? Nó làm việc cho tôi.
tsTable

1
@tsemer, thoạt nhìn, tôi nghĩ câu trả lời của zzzzBov là không đúng, vì tôi không nghĩ nó sẽ cập nhật giá trị phút nếu nó nằm ngoài phạm vi. Nhưng vì "thách thức" của bạn, tôi đã xem xét MDN và xác nhận rằng câu trả lời là hoàn toàn đúng. :)
Ron

1
@tsemer Thử trong trình duyệt web có hỗ trợ Lịch sử múi giờ (ví dụ Internet Explorer 11): Đồng thời đặt TimeZone hệ thống của bạn thành "Châu Á / Yekaterinburg":var timestamp = Date.parse("2011-03-26T20:59:59.999Z"); var d = new Date(timestamp); d.setSeconds(d.getSeconds() + 10); console.log(d.getTime() - timestamp);
4esn0k



4

Tôi có một vài biến thể mới

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);

2

Đối Date()tượng trong javascript không thực sự thông minh.

Nếu bạn chỉ tập trung vào việc thêm giây thì có vẻ như sẽ xử lý mọi việc trơn tru nhưng nếu bạn cố gắng thêm số X của giây thì thêm số X và phút, v.v., vào cùng một Dateđối tượng bạn sẽ gặp rắc rối. Vì vậy, tôi chỉ đơn giản là quay lại chỉ sử dụng setSeconds()phương thức và chuyển đổi dữ liệu của mình thành giây (hoạt động tốt).

Nếu bất cứ ai cũng có thể chứng minh việc thêm thời gian cho một Date()đối tượng toàn cầu bằng cách sử dụng tất cả các phương thức đã đặt và có thời gian cuối cùng xuất hiện chính xác thì tôi muốn xem nhưng tôi có cảm giác rằng một phương thức tập hợp sẽ được sử dụng tại một thời điểm trên một Date()đối tượng nhất định và trộn chúng dẫn đến một mớ hỗn độn.

var vTime = new Date();

var iSecondsToAdd = ( iSeconds + (iMinutes * 60) + (iHours * 3600) + (iDays * 86400) );

vTime.setSeconds(iSecondsToAdd);

Dưới đây là một số tài liệu có thể giúp :


2
  1. bạn có thể sử dụng setSecondsphương pháp bằng cách nhận được vài giây từ hôm nay và chỉ cần thêm 10 giây vào đó

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Bạn có thể thêm 10 * 1000 mili giây vào ngày mới:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. Bạn có thể sử dụng setTime:

    today.setTime(now.getTime() + 10000)

1

Hãy thử cách này.

Date.prototype.addSeconds = function(seconds) {
  var copiedDate = new Date(this.getTime());
  return new Date(copiedDate.getTime() + seconds * 1000);
}

Chỉ cần gọi và chỉ định new Date().addSeconds(10)

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.