2012-10-03 15 views
5

Tôi nhận thấy điều gì đó kỳ lạ với múi giờ và đối tượng Javascript Date.Có cách nào để đại diện cho 21 tháng 10 năm 2012 trong một đối tượng Javascript `Date`?

Cố gắng này trên một hộp Linux:

$ TZ='America/Sao_Paulo' js 
js> new Date(2012, 9, 21, 0, 0, 0).toString() 
"Sat Oct 20 2012 23:00:00 GMT-0300 (BRST)" 

tôi thấy nó không thể có được một đối tượng đại diện cho ngày 21 tháng 10 năm 2012. Mỗi attemps để có được một Date 0:00-01:00 ngày hôm đó kết quả trong một ngày trước ngày từ 11: 00-00: 00.

(Windows người dùng có thể thay đổi múi giờ của họ để Brasilia/GMT-03 để trải nghiệm những hành vi tương tự)

Thêm một giờ (hoặc một ngày nào đó) cho một kết quả đối tượng ngày đó trong việc trở lại cùng ngày.

Tôi đoán nó phải làm với thời gian tiết kiệm ánh sáng ban ngày xảy ra vào ngày cụ thể đó ở Brazil, tuy nhiên tôi hoàn toàn không biết cách đối phó với điều đó.

Tôi có một vòng lặp mà lặp trong những ngày của tháng (đối với một ứng dụng lịch) và nó rõ ràng là vòng mãi mãi trong trường hợp đó khi đạt 20 tháng 10 năm 2012.

Phải có một cái gì đó tôi đang làm sai, nhưng tôi không biết làm thế nào để đối phó với một trường hợp như vậy, như tôi đoán nó cũng có thể xảy ra cho các múi giờ khác.

Cách được khuyến nghị xử lý với Date trong Javascript là gì để đảm bảo rằng các vấn đề liên quan đến thời gian tiết kiệm thời gian trong ngày/giờ như vậy không xảy ra?

Trả lời

0

Đây là hành vi hoàn toàn chính xác. Do nửa đêm DST chỉ đơn giản là không tồn tại trong thời gian địa phương ở Brazil vào ngày 21 tháng 10. Nếu bạn chỉ cần tạo lịch, bạn chỉ có thể sử dụng new Date(2012, 9, 21, 0, 0, 0).toUTCString() thay vì new Date(2012, 9, 21, 0, 0, 0).toString() và các số khác UTC methods.

Ví dụ: để tạo ngày UTC, bạn có thể sử dụng new Date(Date.UTC(2012, 9, 21, 0, 0, 0));.

+0

Cảm ơn câu trả lời của bạn. Tuy nhiên vấn đề của tôi là không nhận được đại diện chuỗi của ngày, nhưng nhận được một đối tượng validd đại diện cho thời điểm chính xác này. – ereOn

+1

Sau đó, chỉ cần sử dụng phương pháp UTC: 'ngày mới (Date.UTC (2012, 9, 21, 0, 0, 0)); ' – bjornd

+0

Điều đó hoạt động tốt hơn thực sự. Bạn có thể vui lòng chỉnh sửa câu trả lời của bạn để làm cho nó rõ ràng hơn những gì các giải pháp thực sự là? Tôi sẽ rất vui khi chấp nhận nó sau đó :) – ereOn

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