Cập nhật 2015
Đây là một câu hỏi cũ nhưng những câu hỏi mới khác như:
được đóng lại như là bản sao của cái này, vì vậy tôi nghĩ điều quan trọng là thêm một số thông tin mới ở đây. Tôi đang viết nó bởi vì tôi đã sợ rằng mọi người thực sự sao chép và dán một số mã được đăng ở đây và sử dụng nó trong sản xuất.
Hầu hết các câu trả lời ở đây đều sử dụng một số biểu thức chính quy phức tạp chỉ khớp với một số định dạng rất cụ thể và thực sự làm sai (như khớp ngày 32 tháng 1 trong khi không khớp với ngày ISO thực tế như được quảng cáo - xem bản demo ) hoặc chúng cố gắng chuyển bất cứ điều gì cho nhà Date
xây dựng và chúc cho những điều tốt đẹp nhất
Sử dụng khoảnh khắc
Như tôi đã giải thích trong câu trả lời này này, hiện tại có một thư viện có sẵn cho điều đó:
Moment.js
Đây là một thư viện để phân tích, xác thực, thao tác và hiển thị ngày trong JavaScript, có API phong phú hơn nhiều so với các hàm xử lý ngày JavaScript tiêu chuẩn.
Nó được 12kB rút gọn / gzipped và hoạt động ở Node.js và các nơi khác:
bower install moment --save # bower
npm install moment --save # npm
Install-Package Moment.js # NuGet
spm install moment --save # spm
meteor add momentjs:moment # meteor
Sử dụng Khoảnh khắc bạn có thể rất cụ thể về việc kiểm tra ngày hợp lệ. Đôi khi rất quan trọng để thêm một số manh mối về định dạng mà bạn mong đợi. Ví dụ: một ngày như 22/12/2015 trông giống như một ngày hợp lệ, trừ khi bạn sử dụng định dạng DD / MM / YYYY trong trường hợp ngày này sẽ bị từ chối là không hợp lệ. Có một số cách bạn có thể nói với Moment về định dạng mà bạn mong đợi, ví dụ:
moment("06/22/2015", "MM/DD/YYYY", true).isValid(); // true
moment("06/22/2015", "DD/MM/YYYY", true).isValid(); // false
Đối true
số là có vì vậy Khoảnh khắc sẽ không cố phân tích cú pháp đầu vào nếu nó không chính xác tuân thủ một trong các định dạng được cung cấp (theo ý kiến của tôi nên là một hành vi mặc định).
Bạn có thể sử dụng một định dạng được cung cấp nội bộ:
moment("2015-06-22T13:17:21+0000", moment.ISO_8601, true).isValid(); // true
Và bạn có thể sử dụng nhiều định dạng như một mảng:
var formats = [
moment.ISO_8601,
"MM/DD/YYYY :) HH*mm*ss"
];
moment("2015-06-22T13:17:21+0000", formats, true).isValid(); // true
moment("06/22/2015 :) 13*17*21", formats, true).isValid(); // true
moment("06/22/2015 :( 13*17*21", formats, true).isValid(); // false
Xem: DEMO .
Thư viện khác
Nếu bạn không muốn sử dụng Moment.js, thì cũng có các thư viện khác:
Cập nhật năm 2016
Tôi tạo ra các immoment mô-đun đó là tương tự (một tập hợp con của) Moment nhưng không bất ngờ gây ra bởi đột biến của các đối tượng hiện có (xem các tài liệu để biết thêm).
Cập nhật 2018
Hôm nay tôi khuyên bạn nên sử dụng Luxon để thao tác ngày / giờ thay vì Khoảnh khắc, điều này (không giống như Khoảnh khắc) làm cho tất cả các đối tượng không thay đổi để không có những bất ngờ khó chịu liên quan đến đột biến ngày.
Thêm thông tin
Xem thêm:
Một loạt các bài viết của Rob Gravelle về các thư viện phân tích ngày tháng JavaScript:
Dòng dưới cùng
Tất nhiên ai cũng có thể thử phát minh lại bánh xe, viết biểu thức chính quy (nhưng thực sự vui lòng đọc ISO 8601 và RFC 3339 trước khi bạn làm điều đó) hoặc gọi các nhà xây dựng buit-in với dữ liệu ngẫu nhiên để phân tích các thông báo lỗi như 'Invalid Date'
(Bạn có chắc là thông báo này là hoàn toàn giống nhau trên tất cả các nền tảng? Trong tất cả các địa phương? Trong tương lai?) hoặc bạn có thể sử dụng giải pháp đã được thử nghiệm và sử dụng thời gian của mình để cải thiện nó, không phải phát minh lại. Tất cả các thư viện được liệt kê ở đây là mã nguồn mở, phần mềm miễn phí.