Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Cách kiểm tra định dạng ngày tháng (validate date) trong JavaScript

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().