2011-12-07 43 views
19

Tôi có 2 đối tượng ngày. Tôi muốn lấy ngày từ một và thời gian từ khác và kết hợp chúng thành một đối tượng ngày mới.Làm cách nào để hợp nhất hai ngày trong JavaScript?

date.toString() = Wed Dec 21 2011 00:00:00 GMT+0000 (GMT) 
time.toString() = Sun Dec 31 2000 03:00:00 GMT+0000 (GMT) 

# I want to end up with 
datetime.toString() = Wed Dec 21 2011 03:00:00 GMT+0000 (GMT) 

Làm cách nào để tôi có thể thực hiện điều này tốt nhất?

+2

Bạn có cần thêm thông tin hơn [this] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)? – Jon

Trả lời

36
var datetime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 
         time.getHours(), time.getMinutes(), time.getSeconds()); 
+9

Lưu ý rằng 'getYear' không được dùng nữa và nên chuyển sang' getFullYear'. Ngoài ra, 'getDay' trả về ngày trong tuần và nên được chuyển sang' getDate'. –

+0

Theo như tôi nhận được, giải pháp này không tính đến thời gian tiết kiệm ánh sáng ban ngày? – chmanie

1
var msPerDay = 1000 * 60 * 60 * 24; 
var newDateTime = new Date(date.getTime() + (time.getTime() % msPerDay)); 

EDIT: tôi giả định biến ngày là một ngày mà không cần bất cứ lúc nào.

1

Tôi không biết nếu điều này là tốt nhất, nhưng bạn có thể thử như sau:

datetime = new Date(
    date.getUTCFullYear(), 
    date.getUTCMonth(), 
    date.getUTCDate(), 
    time.getUTCHours(), 
    time.getUTCMinutes(), 
    time.getUTCSeconds() 
); 

Để tham khảo thêm về các đối tượng Date trông here.

+0

không hoạt động cho tôi - đã phá vỡ TZ và làm sai lệch thời gian – Kuf

+0

@Kuf bạn có thể cụ thể hơn một chút và có thể đưa ra một ví dụ không? Chính xác thì bạn đang cố đạt được điều gì? Nếu nó rất khác với những gì OP hỏi bạn nên xem xét bắt đầu/hỏi câu hỏi của riêng bạn. –

+0

Tôi đã để lại nhận xét này làm cảnh báo. trong mã của bạn, bạn mất thời gian địa phương, sau đó chuyển đổi nó sang UTC, sau đó lưu trữ nó một lần nữa như là địa phương, mà messes TZ. Tôi đã giải quyết nó bằng cách bỏ 'UTC' từ mỗi tên hàm (như câu trả lời @pna). hy vọng rằng có ý nghĩa. – Kuf

2

bạn có thể sử dụng chức năng chuỗi để xây dựng chuỗi mục tiêu ...

datetime = date.toString().substr(0,16) + time.toString().substr(16,40) 

sau đó nếu bạn cần phải có nó như là một đối tượng ngày, thức ăn nó vào một new date()

5

Làm thế nào về một cái gì đó như thế này :

var year = date.getFullYear(), 
    month = date.getMonth(), 
    day = date.getDate(); 

time.setFullYear(year); 
time.setMonth(month); 
time.setDate(day); 
3
var parts = ['Hours', 'Minutes', 'Seconds', 'Milliseconds']; 
for (var i=0, p; p=parts[i], i<parts.length; i++) { 
    date['setUTC'+p](time['getUTC'+p]()); 
} 
1

đây là một phương pháp sử dụng regexp để thay thế thời gian trong ngày và sau đó creat e đối tượng Date mới.

dateTime = new Date(date.toString().replace(/(\d\d:){2}\d{2}/,/(\d\d:){2}\d{2}/.exec(time.toString())[0])); 
Các vấn đề liên quan