2012-10-09 49 views
22
var dateObj = new Date(); 
var val = dateObj.getTime(); 
//86400 * 1000 * 3 Each day is 86400 seconds 
var days = 259200000; 

val = val + days; 
dateObj.setMilliseconds(val); 
val = dateObj.getMonth() + 1 + "/" + dateObj.getDate() + "/" + dateObj.getFullYear(); 
alert(val); 

Tôi đang cố gắng lấy ngày hiện tại, thêm ba ngày mili giây vào nó và có dấu ngày hiển thị 3 ngày sau từ hiện tại. Ví dụ - nếu hôm nay là 10/09/2012 thì tôi muốn nói là 10/12/2012.Cố gắng thêm 3 ngày trong mili giây vào ngày hiện tại

phương pháp này không hoạt động, tôi nhận được các tháng và ngày nghỉ. Bất kỳ đề xuất?

+1

Tôi nghĩ rằng bạn muốn setTime hơn setMilliseconds –

+0

Hãy thử: 'dateObj.setTime (dateObj.getTime() + 8.64e7 * 3) 'nhưng lưu ý thay đổi tiết kiệm ánh sáng ban ngày có thể cho kết quả không mong muốn. Đơn giản chỉ cần thêm 3 vào ngày: 'dateObj.setDate (dateObj.getDate() + 3)'. – RobG

Trả lời

38

Để thêm thời gian, có được ngày hiện tại sau đó thêm, như mili giây, số lượng cụ thể về thời gian, sau đó tạo ra một ngày mới với giá trị:

// get the current date & time 
var dateObj = Date.now(); 

// Add 3 days to the current date & time 
// I'd suggest using the calculated static value instead of doing inline math 
// I did it this way to simply show where the number came from 
dateObj += 1000 * 60 * 60 * 24 * 3; 

// create a new Date object, using the adjusted time 
dateObj = new Date(dateObj); 

Để giải thích thêm về điều này; lý do dataObj.setMilliseconds() không hoạt động là vì nó đặt giá trị PROPERTY mili giây của dateobj thành giá trị được chỉ định (giá trị từ 0 đến 999). Nó không được thiết lập, như mili giây, ngày của đối tượng.

// assume this returns a date where milliseconds is 0 
dateObj = new Date(); 

dateObj.setMilliseconds(5); 
console.log(dateObj.getMilliseconds()); // 5 

// due to the set value being over 999, the engine assumes 0 
dateObj.setMilliseconds(5000); 
console.log(dateObj.getMilliseconds()); // 0 
+1

Tôi chỉ cần var days = 259200000 vì nó là tĩnh và không bao giờ thay đổi. Cảm ơn! Tò mò, tại sao không setMilliseconds (ngày) làm như vậy? – dman

+1

Tôi thực sự không biết. Tôi chỉ biết từ experiance nếu nó là giá trị tĩnh, sau đó thực hiện các phép tính như trên. – SReject

+4

Vì đây là (một năm sau) mục đầu tiên xuất hiện để thêm mili giây vào một ngày, lý do setMilliseconds không hoạt động là nó đặt phần mili giây của đối tượng ngày. Vì vậy, trong hoạt động bình thường, nó hy vọng một số từ 0-999. Tuy nhiên, nó cho phép bất kỳ số nào và giống như thêm giá trị vào ngày mà không có thành phần mili giây trước đó của ngày. –

3

Nếu bạn cần phải thực hiện tính toán ngày trong javascript, sử dụng moment.js:

moment().add('days', 3).calendar(); 
+7

Không có hành vi phạm tội đối với bạn, nhưng cho thấy việc sử dụng toàn bộ thư viện để tạo thành một tác vụ đơn giản như vậy có vẻ khá hơn là thực hiện nó. – SReject

+5

không có hành vi phạm tội, khi ai đó đọc mã của tôi, anh ta có lẽ sẽ hiểu moment.js một dòng tốt hơn câu trả lời được chấp nhận. –

+2

Không có gì đơn giản về nhiệm vụ này. Xem xét thay đổi thời gian tiết kiệm ánh sáng ban ngày. –

4

Hãy thử điều này:

var dateObj = new Date(Date.now() + 86400000 * 3);

3

Sử dụng mã này

var dateObj = new Date(); 
var val = dateObj.getTime(); 
//86400 * 1000 * 3 Each day is 86400 seconds 
var days = 259200000; 

val = val + days; 
dateObj = new Date(val); // ********important*********// 
val = dateObj.getMonth() + 1 + "/" + dateObj.getDate() + "/" + dateObj.getFullYear(); 
alert(val); 
Các vấn đề liên quan