2011-01-07 44 views
10

Tôi đang gặp sự cố khi sử dụng hàm Date() mới trong Javascript. Safari đang cung cấp cho tôi thông báo "Ngày không hợp lệ".Ngày mới() bằng cách sử dụng Javascript trong Safari

Tôi đã tạo một ví dụ ngắn tại jsbin.

Điều này dường như hoạt động trên tất cả các trình duyệt khác, nhưng không hoạt động trên Safari. Bất kỳ ý tưởng về cách tôi có thể lấy giá trị từ một đầu vào (như 2011-01-03) và biến nó thành một đối tượng ngày tháng, trong khi nó có hoạt động đúng trong Safari?

Rất cám ơn!

Trả lời

41

Hành vi phân tích ngày trên JavaScript là phụ thuộc triển khai, định dạng ISO8601 gần đây đã được thêm vào Đặc tả phiên bản ECMAScript lần thứ 5, nhưng chưa được hỗ trợ bởi tất cả các triển khai.

Tôi muốn giới thiệu bạn để phân tích nó bằng tay, ví dụ:

function parseDate(input) { 
    var parts = input.match(/(\d+)/g); 
    return new Date(parts[0], parts[1]-1, parts[2]); 
} 

parseDate('2011-01-03'); // Mon Jan 03 2011 00:00:00 

Về cơ bản các chức năng trên phù hợp với từng bộ phận cập nhật và sử dụng ngày constructor, để xây dựng một đối tượng ngày, lưu ý rằng tháng luận cần phải là 0-based (0 = Jan, 1 = Feb, ... 11 = Dec).

+0

Điều này đã thực hiện. Cảm ơn bạn đã làm rõ. – Dodinas

1

Trong khi giải pháp của CMS có thể cao hơn, tôi thấy rằng việc sử dụng Date.parse('2011-01-13') cũng là một giải pháp nhanh chóng, hoạt động.

+2

Điều đó dường như không hoạt động trong Safari (5.1.3), tôi chỉ nhận được 'NaN' làm giá trị trả lại. –

+0

Phải. 'Date.parse' dường như được thực hiện cụ thể. – n0nick

0

csnover có một số tiến bộ theo tiêu chuẩn ISO 8601 đang ngày tăng cường sẵn trên GitHub: https://github.com/csnover/js-iso8601/blob/master/iso8601.js

Bao gồm mã của ông nên cung cấp một sửa chữa tạm thời trong khi làm việc theo nhóm Safari đối với việc thực hiện ES5 hoàn chỉnh hơn.

+0

Mã này không hoạt động trên Safari –

2

Các giải pháp dễ dàng tôi đã cố gắng Tải date.js từ http://datejs.com/ Bao gồm trong tập tin của bạn

ngày

sau đó var = Date.parse ('1970/01/12 00:00:00'); var formattedDate = date.toString ('yyyy-MM-dd');

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