2014-10-16 16 views
8

Tôi gặp một vấn đề lạ với việc khởi tạo đối tượng Date. Và tự hỏi nếu ai đó có thể giải thích tại sao ..Nhà xây dựng ngày cung cấp kết quả không mong muốn khi được gọi với các đối số tương tự

var exp1 = new Date('2014-10-17'); 
var exp2 = new Date(2014,9,17); 
var exp3 = new Date('17 Oct 2014'); 
console.log(exp1); 
console.log(exp2); 
console.log(exp3); 

Kết quả:

 
Thu Oct 16 2014 18:00:00 GMT-0600 (MDT) // 16th? 
Fri Oct 17 2014 00:00:00 GMT-0700 (MST) // Why GMT -7 
Fri Oct 17 2014 00:00:00 GMT-0600 (MDT) // The only one that works as expected 

Tại sao những ba Date đối tượng rất khác nhau?

+0

Bạn có thực sự viết 9 cho cuộc gọi thứ hai không? hoặc là một lỗi đánh máy phải là 10? – mdewitt

+0

@badaboom Bạn đang sử dụng trình duyệt nào? –

+2

@mdewitt Giá trị tháng bắt đầu bằng 0: "Giá trị nguyên đại diện cho tháng, bắt đầu bằng 0 cho tháng 1-11 cho tháng 12". https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date –

Trả lời

2

Ngày đầu tiên được coi là GMT vì không có chênh lệch múi giờ được cung cấp. Khi đăng xuất, nó sẽ hiển thị thời gian trong múi giờ địa phương của bạn. Thêm một bù đắp (exp4 bên dưới), tôi nhận được ngày dự kiến.

var exp1 = new Date('2014-10-17'); 
var exp2 = new Date(2014,9,17); 
var exp3 = new Date('17 Oct 2014'); 
var exp4 = new Date('2014-10-17z-0500'); 

Kết quả:

Thu Oct 16 2014 19:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 

Tôi không chắc chắn về exp2 cho bạn, nhưng nghi ngờ nó có cái gì để làm với thời gian tiết kiệm ánh sáng ban ngày và rằng bạn sống trong một khu vực mà không quan sát tiết kiệm ánh sáng ban ngày (Arizona?).

Chỉnh sửa: điều này có vẻ là trình duyệt cụ thể. Kết quả ở trên đã được tạo trong Chrome trong khi ở IE 11, exp4 là ngày không hợp lệ. Đối với IE 11, tôi phải sử dụng định dạng này:

var exp4 = new Date('2014-10-17T00:00-05:00'); 
+0

Cảm ơn bạn đã trả lời. Múi giờ bù đắp .. có thể là bạn đúng. Không nghĩ về nó. Nhưng dù sao exp1 và exp3 làm tôi bối rối. Tại sao trong trường hợp đầu tiên được chỉ vào GMT nhưng trong thứ hai nó hoạt động tốt? Khá bất ngờ chức năng .. – badaboom

+0

@badaboom Có, sự khác biệt giữa exp1 và exp3 là bất ngờ. Tôi đã không thấy bất cứ điều gì trong tài liệu để giải thích nó, do đó, vào thời điểm này tôi tin rằng nó phụ thuộc vào việc thực hiện trong trình duyệt và rằng họ đang xử lý 2 chuỗi khác nhau khi phân tích cú pháp. –

+0

ok, cảm ơn bạn. Nhưng tôi nghĩ rằng không liên quan đến việc thực hiện trình duyệt, có thể là một cái gì đó trong JS .. thử nghiệm trong tất cả các trình duyệt mới nhất – badaboom

Các vấn đề liên quan