2010-01-19 32 views
10

"Trong cuộc khủng hoảng năng lượng" năm, Quốc hội ban hành ngày bắt đầu sớm hơn cho thời gian ban ngày. Năm 1974, thời gian ban ngày bắt đầu vào ngày 6 tháng 1 và năm 1975 bắt đầu vào ngày 23 tháng 2. Sau hai năm đó, ngày bắt đầu hoàn nguyên trở lại Chủ nhật vào tháng Tư. "
(qua http://aa.usno.navy.mil/faq/docs/daylight_time.php)Thời gian tiết kiệm ánh sáng ban ngày trong Javascript cho năm 1974?

Dường như có lỗi trong đối tượng ngày Javascript cho những ngày này. Nếu bạn chuyển đổi 127627200000 mili giây sang một ngày, nó sẽ là Thu Jan 17 00:00:00 EDT 1974. Điều này là chính xác trên http://www.fileformat.info/tip/java/date2millis.htm, nhưng không chính xác trên http://www.esqsoft.com/javascript_examples/date-to-epoch.htm, cho biết nó chuyển đổi thành ngày 16 tháng 1 năm 1974 23:00:00 GMT -0500 (Giờ chuẩn miền Đông). Nếu bạn tạo một đối tượng Date (127627200000) mới trong javascript, nó sẽ cho phép chuyển đổi ngày sau. Điều này xảy ra trong tất cả các trình duyệt chính.

Tôi không thể tưởng tượng đây là lần đầu tiên sự cố này xảy ra với bất kỳ ai, nhưng tôi không thể tìm thấy bất kỳ trường hợp nào khác của sự cố này với một vài tìm kiếm trực tuyến. Có ai biết nếu có một sửa chữa hiện tại cho điều này hoặc sửa chữa dễ dàng hơn so với thủ công kiểm tra các ngày Javascript có chuyển đổi sai? Có những ngày khác đây là vấn đề không?

+0

có vẻ quen thuộc :) – cwash

+2

Ah !! Niềm vui của toàn cầu hóa ... Bạn có nghĩ rằng trong khi có thể có một DST ở Mỹ vào năm 1974, nó có thể không phải là trường hợp ở các nước khác? Và điều đó để sử dụng rộng rãi càng tốt (chưa kể đến một quy trình phát triển dễ dàng hơn) JavaScript có thể không có bảng cho tất cả DST có sẵn ở mọi quốc gia có thể? –

Trả lời

12

Như bao giờ hết, nó là tốt nhất để kiểm tra spec :)

Trong trường hợp này, tôi đã khá sốc khi thấy điều này trong phần 15.9.1.9 của ECMA-262:

Việc thực hiện ECMAScript nên không cố gắng xác định xem thời gian chính xác có phải là ánh sáng ban ngày hay không tiết kiệm thời gian, nhưng chỉ cho dù ánh sáng ban ngày tiết kiệm thời gian sẽ có hiệu lực nếu thời gian tiết kiệm ánh sáng ban ngày hiện tại thuật toán đã được sử dụng tại thời gian. Điều này tránh các biến chứng chẳng hạn như tính đến các năm mà vị trí địa lý tiết kiệm ánh sáng ban ngày tiết kiệm thời gian quanh năm.

Nói cách khác, việc triển khai ECMAScript tuân thủ là không được phép chính xác về mặt lịch sử. Bây giờ liệu tất cả các triển khai có tuân theo điều này hay không, tôi không chắc ... nhưng nó gợi ý bạn cần một số loại thư viện riêng biệt nếu bạn muốn có các múi giờ chính xác trong lịch sử ... ở đâu "chính xác về mặt lịch sử "không phải gần như xa như năm 1974, tất nhiên: Mỹ đã thay đổi lịch trình DST của mình trong năm 2007, và các quốc gia khác đã làm như vậy gần đây hơn (và ít cảnh báo hơn).


Lần xuất hiện đầu tiên là 15.9.1.9. Đối với một số lý do nó xảy ra hai lần - một lần cho "Điều chỉnh thời gian tiết kiệm ánh sáng ban ngày" và một lần cho "Giờ địa phương". Wow.

+0

Các múi giờ lịch sử của Java đã gây ngạc nhiên cho một số ít người (đặc biệt khi chúng được thêm vào 1.4).Những bất ngờ đặc biệt là bù giờ +1 cho London vào ngày 1970-01-01 và phần bù thứ hai cho Hy Lạp, Helsinki vào đầu những năm 1920. –

+1

Hiệu số thứ hai thực sự giống như tin xấu. Tôi nghĩ tôi thậm chí còn cho rằng rất ít ứng dụng thực sự muốn * hành vi đó, có lẽ tốt nhất là bỏ nó ra, như giây nhảy vọt ... –

0

Java thực hiện các múi giờ lịch sử (quay lại khoảng 1920), JavaScript dường như không.

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