2012-01-16 17 views
30

Tôi đang bối rối nhưng trong javascript:Trong javascript: Tại sao new Date ('2012/01/15') - Ngày mới ('2012/01/15') == 21.600.000

> new Date('2012-1-15') - new Date('2012-01-15') 
    21600000 

Tại sao cái đó? (21600000/1000/3600 == 6 giờ)

+4

Bản in ở đây 14400000, tức là 4 giờ. Tôi đang ở GMT-4. Đó là khả năng liên quan :) – BalusC

+2

Không cho tôi - 2012-1-15 trả về ngày không hợp lệ thay vì một đối tượng ngày (FF 9.0.1), gây ra toàn bộ điều để trả về NaN. –

+0

Tôi nhận được 18000000, 5 giờ và tôi là GMT-5 ... Tôi có @BalusC trên trang này. –

Trả lời

37

Định dạng ngày yyyy-mm-dd (2012-01-15) được phân tích là ngày UTC trong khi yyyy-m-dd (2012-1-15) được phân tích là ngày địa phương. Điều này được hiển thị nếu bạn sử dụng .toString trên mỗi thiết bị.

> (new Date('2012-01-15')).toString() 
"Sat Jan 14 2012 16:00:00 GMT-0800 (Pacific Standard Time)" 
> (new Date('2012-1-15')).toString() 
"Sun Jan 15 2012 00:00:00 GMT-0800 (Pacific Standard Time)" 

Lưu ý rằng tôi ở California, do đó theo Giờ chuẩn Thái Bình Dương. Nếu bạn đang ở trong một múi giờ khác nhau, bạn sẽ nhận được kết quả khác nhau.

Khi JavaScript phân tích ngày, nó sẽ thử các định dạng được sử dụng trong nhiều lĩnh vực hơn (chẳng hạn như UTC) trước khi định dạng ngày được bản địa hóa. Phần cuối cùng của định dạng ngày UTC là chênh lệch múi giờ từ GMT được giả định là 0 khi thiếu (như trong ví dụ này). Để có cùng một ngày, bạn sẽ cần dấu thời gian UTC đầy đủ: 2012-01-15T00: 00: 00-08: 00.

+6

nó sẽ là thú vị để biết/tại sao/điều này xảy ra. – Hamish

+0

@Hamish Tôi đã thêm một chút giải thích, hãy cho tôi biết nếu tôi nên đi sâu hơn. –

+3

Rất kỳ quặc, kể từ đó làm cách nào để phân tích cú pháp 2012-10-15? nó không thể là cả utc và local. –

7
a= new Date('2012-1-16') 
b= new Date('2012-01-16') 
alert(a); 
alert(b); 

Đối với trường hợp đầu tiên, chức năng hàm tạo đặt thời gian là 00:00 theo múi giờ của bạn. Nhưng trong trường hợp thứ hai, nó khởi tạo thời gian liên quan đến giờ GMT.002

10

Kết quả của new Date('2012-1-15') phụ thuộc vào việc thực hiện (ECMAScript standard, khoản 15.9.4.2).

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