Vấn đề
JS new Date("invalid") trả về Invalid Date (object, không throw). Cần validate thủ công.
Hàm validate định dạng DD/MM/YYYY
<script>
function validDate(dateStr) {
var parts = dateStr.split('/');
if (parts.length !== 3) return false;
var day = parseInt(parts[0], 10);
var month = parseInt(parts[1], 10);
var year = parseInt(parts[2], 10);
// Tạo date (tháng 0-based)
var date = new Date(year, month - 1, day);
// Kiểm tra: date hợp lệ VÀ thành phần khớp (bắt ngày 31/04 → 01/05)
return date.getFullYear() === year &&
date.getMonth() === month - 1 &&
date.getDate() === day;
}
document.write("11/11/2017: " + validDate('11/11/2017') + "<br>"); // true
document.write("18/18/2017: " + validDate('18/18/2017') + "<br>"); // false (tháng 18)
document.write("05/09/2017: " + validDate('05/09/2017') + "<br>"); // true
document.write("31/04/2017: " + validDate('31/04/2017') + "<br>"); // false (tháng 4 ko có 31)
</script>
Kết quả
11/11/2017: true 18/18/2017: false 05/09/2017: true 31/04/2017: false
Cách hiện đại: Input type=date
<input type="date" id="dateInput">
<script>
document.getElementById('dateInput').addEventListener('change', function(e) {
console.log("Valid date:", e.target.value); // yyyy-mm-dd
});
</script>
Trình duyệt tự validate, trả về ISO string (yyyy-mm-dd).
Thư viện khuyên dùng
- date-fns:
parse(),isValid(). - Luxon:
DateTime.fromFormat(). - Day.js:
dayjs(str, format).isValid().