Trước hết, tôi nghĩ múi giờ có thể liên quan đến điều này. Tôi đang ở EST/EDT. Ngoài ra, tôi đang thử nghiệm này trên chromium 17/linux.Hàm tạo ngày tháng: đối số dạng số và đối số chuỗi cho các ngày khác nhau trong một số trường hợp
Bây giờ, chúng ta hãy nói rằng tôi tạo ra hai ngày như thế này:
// December 5
dateFromNumbers = new Date(2020, 11, 5);
dateFromString = new Date("2020-12-5");
Có vẻ như những ngày này nên có timestamps giống hệt nhau, và họ làm:
+dateFromNumbers == +dateFromString; // true
... ít nhất là trong trường hợp này . Nhưng trong một số trường hợp, họ không:
// December 15
dateFromNumbers = new Date(2020, 11, 15);
dateFromString = new Date("2020-12-15");
+dateFromNumbers == +dateFromString; // false
Điều gì đang xảy ra ở đây?
dateFromNumbers; // Tue Dec 15 2020 00:00:00 GMT-0500 (EST)
dateFromString; // Mon Dec 14 2020 19:00:00 GMT-0500 (EST)
Hình như dateFromString
là 5 giờ sớm hơn dateFromNumbers
trong trường hợp này (EST là GMT - 5, tôi chắc chắn rằng nó có liên quan bằng cách nào đó).
Dường như ảnh hưởng đến kết thúc từ tháng 10 đến tháng 12. Đây là một fiddle mà làm cho nó dễ dàng để xem những ngày khác nhau (trừ khi bạn là màu xanh-màu xanh, trong trường hợp đó nó có thể khó nhìn thấy, lời xin lỗi của tôi).
Điều gì cung cấp?
Ghi chú:
- Bạn có thể đặt múi giờ hệ thống của bạn để EST/EDT để xem ví dụ jsfiddle như tôi nhìn thấy nó.
- Số tháng của tháng không dựa trên số 0;
11
không phải là lỗi đánh máy. - Sự cố này xuất hiện hàng năm mà tôi đã kiểm tra.
Trong trường hợp thứ hai của bạn là ngày 15 tháng 11 năm 2020 và ngày 15 tháng 12 năm 2020. đó có phải là lỗi đánh máy không? – Habib
Chạy Chrome 18.0.1025.162 m, Windows, GMT +2: kết quả có thể tái sản xuất. Nhưng rõ ràng xác định thời gian trong biểu diễn chuỗi giải quyết vấn đề. Tôi thường tránh ngày tháng từ chuỗi vì định dạng hỗ trợ trên các trình duyệt khác nhau và kém tài liệu, mili giây đáng tin cậy hơn rất nhiều. – DCoder