var date1 = new Date();
date1.setFullYear(2011, 6, 1);
// 2011-07-01, ok
console.log(date1);
// set date2 the same date as date1
var date2 = date1;
// ...
// now I'm gonna set a new date for date2
date2.setFullYear(2011, 9, 8);
// 2011-10-08, ok
console.log(date2);
// 2011-10-08, wrong, expecting 2011-07-01
// I didn't assign a new date to date1
// WHY is date1 changed?
console.log(date1);
Trả lời
ngày là đối tượng, vì vậy nó được gán như tài liệu tham khảo - phương pháp đơn giản là
date2 = new Date(date1);
Cả hai biến ngày chỉ là tài liệu tham khảo cho các đối tượng cùng một ngày trong bộ nhớ. Vì vậy, bạn cần date2
là một bản sao của date1
. Thay đổi:
var date2 = date1;
này:
var date2 = new Date(date1.getTime());
Bạn cần phải tạo một bản sao của date1
, hiện date1
và date2
tham khảo các đối tượng cùng ngày.
var date2 = new Date(date1.valueOf());
JavaScript sử dụng vượt qua bằng cách tham khảo cho những ngày * (cũng như tất cả các phi nguyên thủy -. var o = {}; var j = o; j.foo = 1; console.log(o.foo); //1
Mặt khác, đối với Numbers, Strings, và Booleans var o = 0; var j = o; j++; console.log(j); // 0
), do đó dự kiến hành vi.
Nếu bạn cần phải sao chép một ngày bạn luôn có thể
var date2 = new Date(date1.getTime());
* Xin vui lòng xem ý kiến để hiểu tại sao điều này là không hoàn toàn chính xác.
Nó không thực sự vượt qua bằng cách tham chiếu. Nó truyền theo giá trị trong đó giá trị là tham chiếu. Nếu nó được chuyển qua tham chiếu, việc thay đổi tham chiếu sẽ thay đổi đối tượng: 'a = {}; b = a; b = null; 'Trong một pass bởi mô hình đánh giá tham chiếu,' a === null' phải là true, vì 'b' * là *' a' và chúng ta đặt 'b' thành' null'. – davin
@davin Đó là sự tinh tế mà tôi chưa biết. – cwallenpoole
Bỏ phiếu. Rất hữu ích. Tuy nhiên, một chi tiết. Nếu 'date2' đã được cấp phát, thì không cần sử dụng' new'. Việc gán sẽ được thực hiện bởi: 'date2.setTime (date1.valueOf());'. – Karl
date2
Đó là tham chiếu đến date1
.
Để đạt được kết quả mong đợi, làm như sau:
var date1 = new Date();
date1.setFullYear(2011, 6, 1);
var date2 = new Date();
date2.setTime(date1.valueOf());
Biến thể của @ câu trả lời SergeS, nhưng Date() đối tượng trong js ép buộc đến số, do đó bạn không cần getTime():
// general case
var dateValueCopy = new Date(date1);
Và trình bày lại với OP tên biến:
var date2 = new Date(date1);
Để hiển thị đối tượng ngày trùng với số cố gắng: (ngày mới() * 1) – yzorg
<html lang="en">
<head>
<script>
function getDateDiff(time1, time2) {
var str1= time1.split('/');
var str2= time2.split('/');
var t1 = new Date(str1[2], str1[0]-1, str1[1]);
var t2 = new Date(str2[2], str2[0]-1, str2[1]);
var diffMS = t1 - t2;
console.log(diffMS + ' ms');
var diffS = diffMS/1000;
console.log(diffS + ' ');
var diffM = diffS/60;
console.log(diffM + ' minutes');
var diffH = diffM/60;
console.log(diffH + ' hours');
var diffD = diffH/24;
console.log(diffD + ' days');
alert(diffD);
}
//alert(getDateDiff('10/18/2013','10/14/2013'));
</script>
</head>
<body>
<input type="button" onclick="getDateDiff('10/18/2013','10/14/2013')" value="clickHere()" />
</body>
</html>
- 1. Jquery/Javascript - Thêm năm tới ngày biến
- 2. Lỗi phân tích cú pháp ngày JavaScript JavaScript
- 3. Giúp phân tích cú pháp ISO 8601 ngày trong Javascript
- 4. javascript: làm thế nào để phân tích một chuỗi ngày
- 5. Phân tích cú pháp API của Youtube Ngày trong Javascript
- 6. Biến đổi Mảng Javascript thành chuỗi phân tách
- 7. javascript ngày ngày cuối cùng của tháng trước
- 8. Chuyển đổi ngày mySQL thành ngày Javascript
- 9. Số ngày trừ Javascript từ ngày
- 10. Ngày so với ngày mới trong JavaScript
- 11. Kiểm tra ngày trong JavaScript
- 12. So sánh ngày JavaScript
- 13. tạo javascript ngày UTC
- 14. DateTime để javascript ngày
- 15. Javascript JSON Ngày Deserialization
- 16. chênh lệch ngày javascript
- 17. trừ ngày javascript
- 18. Trừ ngày trong JavaScript
- 19. kiểm tra xem một ngày có giữa hai ngày (javascript)
- 20. Phân tích chuỗi ngày để nhận năm
- 21. Lấy ngày từ ngày sử dụng jquery/javascript
- 22. Ngày phân tích cú pháp trong Bash
- 23. Đặt ngày biến trong SQL
- 24. So sánh ngày với javascript
- 25. Lỗi chênh lệch ngày Javascript?
- 26. So sánh Datepicker Ngày Javascript
- 27. Chuyển đổi C# DateTime thành Ngày Javascript
- 28. Phân tích chuỗi ngày giờ
- 29. Thêm giờ vào đối tượng Ngày Javascript?
- 30. Có cách nào để kiểm tra xem biến có phải là Ngày trong JavaScript không?
Hình dạng của nó giống như 'date2' đang được thiết lập như một con trỏ tới những gì' date1' đang trỏ đến. – James