Tôi nghĩ rằng vấn đề là chuỗi "2012-05-12" được lấy là ngày ISO 8601, trong khi "05/12/2012" là ngày RFC 2822. Ở định dạng ISO, thiếu múi giờ ngụ ý UTC. Vào nửa đêm vào buổi sáng ngày 12 tháng 5, ở California (hoặc bất cứ nơi nào bạn đang có) là 7 giờ chiều tối hôm trước. Tuy nhiên,
Ngày RFC không có múi giờ được phân tích cú pháp theo giả định rằng bạn muốn dấu thời gian cho nửa đêm trong múi giờ cục bộ địa phương của bạn. (Vâng, không nhất thiết phải là múi giờ của bạn; múi giờ của máy tính nơi JavaScript của bạn chạy :-)
Bạn có thể thấy sự khác biệt nếu bạn chuyển các chuỗi đó đến Date.parse()
.
Định dạng ngày RFC có thể bao gồm múi giờ rõ ràng, nhưng định dạng ISO không thể. (Vâng, nó có thể, nhưng các trình duyệt không chú ý, và dường như IE không xử lý được tất cả.)
chỉnh sửa — đây là một chức năng đơn giản (câm; không kiểm tra lỗi) sẽ cung cấp cho bạn một ngày từ đó hình thức ISO 3 phần:
function isoDate(str) {
var rv = null;
str.replace(/^(\d\d\d\d)-(\d\d)-(\d\d)$/, function(_, yr, mn, dy) {
rv = new Date(parseInt(yr, 10), parseInt(mn, 10) - 1, parseInt(dy, 10));
});
return rv;
}
Xóa số 0 đứng đầu trong ví dụ đầu tiên. 'var date = new Date (" 2012-5-12 ");' – j08691
@ j08691 dẫn đến lỗi "Ngày không hợp lệ", ít nhất là trong Firefox. – Pointy
@Pointy - Tốt, tôi đã thử nghiệm trong Chrome. – j08691