0

Dùng Javascript kiểm tra ngày tháng nhập vào đúng hay sai

Nếu sử dụng các plugin datetime picker, thông thường chúng đã được bổ sung các hàm kiểm tra và validate ngày  giờ. Nhưng nếu bạn tự mình tạo control cho nhập ngày vào, thì phải làm sao để validate, dùng javascript kiểm tra ngày tháng nhập vào đúng hay sai?

Code javascript kiểm tra ngày tháng

Thay vì phải tải và cài thêm các file thư viện JS cũng như CSS, mình tự tạo control chọn ngày tháng năm bằng HTML/PHP như sau:

datetime picker

Cái khó là chúng ta phải validate liệu người dùng có  chọn một ngày không có thực kiểu 29/2/20xx hay 31/11/20xx.

Tôi sử dụng kiểu Date của js để làm việc này bằng đoạn code nhỏ:

Giải thích

Ở đoạn code trên, tôi cắt chuỗi “24/12/2015” thành mảng chứa các giá trị ngày tháng riêng biệt. Sau đó, tôi đổi chúng thành kiểu số nguyên để có thể dùng làm giá trị khởi tạo cho object Date(), dùng object này để kiểm tra xem chuỗi ngày đưa vào đúng hay sai?

Nếu giá trị ngày/tháng/năm đưa vào hàm khởi tạo new Date(d,m – 1,y) đúng bằng giá trị khi lấy ra từ object này, ngày nhập vào là đúng, còn nếu các giá trị lấy ra khác so với ban đầu, ngày nhập vào là sai!

Tại sao lại như vậy? Đó là vì Date() của js sẽ tự động chuyển đổi các ngày sai thành ngày đúng kế tiếp. Ví dụ ngày 31/11 sai với thực tế 1 ngày, do đó thực ra ngày đúng là 30/11 + 1 = ngày 1/12. Và object date tạo bằng giá trị 31/11, khi lấy ra giá trị getMonth() = 1, getDate() = 12 sẽ khác với ban đầu là 31 và 11.

Cái hay của cách này là ta không cần biết các thuật toán xử lý ngày tháng, không cần tổ chức lưu trữ thông tin tháng nào 30 ngày, tháng nào 31 ngày. Tất cả đã có Date() làm, ta chỉ lợi dụng nó 1 chút để hoàn thành việc kiểm tra.

Chú ý: Date() trong Js sử dụng tháng bắt đầu từ 0. tháng 12 sẽ có giá trị 11. Do đó khi tính toán lấy từ input người dùng cần phải trừ 1.

Bình luận với Facebook

Hoàng Tựa

Yêu thích lập trình web và tạo ra những thứ đẹp đẽ.

Leave a Reply

Your email address will not be published. Required fields are marked *