How to set the input type date in dd-mm-yyyy format using HTML?

To set the input type date in dd-mm-yyyy format using HTML, you need to use alternative approaches since the native <input type="date"> element displays dates in YYYY-MM-DD format by default. This article explores various techniques to customize date formats for better user experience and data consistency.

Creating intuitive web forms is crucial for enhancing user experience, particularly with date inputs. Although HTML5 introduced the <input type="date"> feature for easy date selection, it generally formats dates as YYYY-MM-DD. This can be inconvenient for users in regions that prefer the DD-MM-YYYY format. This article will guide you on various methods to implement date input in the DD-MM-YYYY format utilizing HTML, JavaScript, and external libraries.

Approaches for Implementing DD-MM-YYYY Format

To achieve a date input that conforms to the DD-MM-YYYY standard, consider these methods

Let's explore each method with practical examples.

Individual Input Fields for Day, Month, and Year

A simple method is to create three distinct input fields?one each for the day, month, and year. This allows for better accuracy and flexibility in date entry with individual validation for each component.

Example

This example includes three input fields for the user to enter the day, month, and year separately. Upon submission, an alert showcases the date in the DD-MM-YYYY format

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Separate Date Input Fields</title>
    <style>
        body { font-family: Arial, sans-serif; padding: 20px; }
        .date-inputs { display: flex; gap: 10px; align-items: center; margin: 10px 0; }
        .date-inputs input { width: 60px; padding: 5px; border: 1px solid #ccc; border-radius: 4px; }
        .date-inputs label { margin-right: 5px; font-weight: bold; }
        button { background-color: #007bff; color: white; padding: 8px 16px; border: none; border-radius: 4px; cursor: pointer; }
        button:hover { background-color: #0056b3; }
    </style>
</head>
<body>
    <h2>Enter Date (DD-MM-YYYY)</h2>
    <form id="dateForm">
        <div class="date-inputs">
            <label for="day">Day:</label>
            <input type="number" id="day" name="day" min="1" max="31" required>
            
            <label for="month">Month:</label>
            <input type="number" id="month" name="month" min="1" max="12" required>
            
            <label for="year">Year:</label>
            <input type="number" id="year" name="year" min="1900" max="2100" required>
            
            <button type="submit">Submit</button>
        </div>
    </form>
    
    <div id="result"></div>

    <script>
        document.getElementById("dateForm").addEventListener("submit", function(event) {
            event.preventDefault();
            const day = String(document.getElementById("day").value).padStart(2, '0');
            const month = String(document.getElementById("month").value).padStart(2, '0');
            const year = document.getElementById("year").value;
            
            document.getElementById("result").innerHTML = `<p><strong>Date entered: ${day}-${month}-${year}</strong></p>`;
        });
    </script>
</body>
</html>

The output displays three separate input fields with proper formatting when submitted

Day: [01] Month: [12] Year: [2024] [Submit]
Date entered: 01-12-2024

JavaScript-Based Input Formatting

Another strategy is to use a single text input and JavaScript to format the date with real-time validation. This approach provides immediate feedback to users as they type.

Example

In this scenario, users input the date in one text field with automatic formatting and validation

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Date Input with JavaScript Formatting</title>
    <style>
        body { font-family: Arial, sans-serif; padding: 20px; }
        .form-group { margin: 15px 0; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input[type="text"] { width: 200px; padding: 8px; border: 1px solid #ccc; border-radius: 4px; font-size: 14px; }
        button { background-color: #28a745; color: white; padding: 8px 16px; border: none; border-radius: 4px; cursor: pointer; margin-left: 10px; }
        button:hover { background-color: #218838; }
        .error { color: red; font-size: 12px; margin-top: 5px; }
        .success { color: green; font-weight: bold; margin-top: 10px; }
    </style>
</head>
<body>
    <h2>Date Input with Auto-Formatting</h2>
    <form id="dateForm">
        <div class="form-group">
            <label for="date">Enter Date (DD-MM-YYYY):</label>
            <input type="text" id="date" name="date" placeholder="DD-MM-YYYY" maxlength="10" required>
            <button type="submit">Submit</button>
            <div id="error-message" class="error"></div>
        </div>
    </form>
    
    <div id="result" class="success"></div>

    <script>
        const dateInput = document.getElementById("date");
        const errorMessage = document.getElementById("error-message");
        const result = document.getElementById("result");

        // Auto-format input as user types
        dateInput.addEventListener("input", function(e) {
            let value = e.target.value.replace(/\D/g, ''); // Remove non-digits
            
            if (value.length >= 2) {
                value = value.slice(0, 2) + '-' + value.slice(2);
            }
            if (value.length >= 5) {
                value = value.slice(0, 5) + '-' + value.slice(5, 9);
            }
            
            e.target.value = value;
        });

        document.getElementById("dateForm").addEventListener("submit", function(event) {
            event.preventDefault();
            const dateValue = dateInput.value;
            const dateRegex = /^(\d{2})-(\d{2})-(\d{4})$/;
            const match = dateValue.match(dateRegex);
            
            errorMessage.textContent = '';
            result.textContent = '';
            
            if (match) {
                const [, day, month, year] = match;
                const dayNum = parseInt(day, 10);
                const monthNum = parseInt(month, 10);
                const yearNum = parseInt(year, 10);
                
                // Basic validation
                if (dayNum >= 1 && dayNum <= 31 && monthNum >= 1 && monthNum <= 12 && yearNum >= 1900 && yearNum <= 2100) {
                    result.textContent = `Valid date entered: ${dateValue}`;
                } else {
                    errorMessage.textContent = 'Please enter a valid date (day: 1-31, month: 1-12, year: 1900-2100).';
                }
            } else {
                errorMessage.textContent = 'Please enter a valid date in DD-MM-YYYY format.';
            }
        });
    </script>
</body>
</html>

The output shows auto-formatting as the user types, with validation feedback

Enter Date (DD-MM-YYYY): [15-03-2024] [Submit]
Valid date entered: 15-03-2024

Using Third-Party Date Picker Libraries

Integrating a third-party library can significantly improve the user interface for date selection. Libraries like Flatpickr provide professional date pickers with customizable formats and enhanced user experience.

Example

This example uses the Flatpickr library to create a date picker that displays dates in DD-MM-YYYY format

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
    <title>Flatpickr Date Picker Example</title>
    <style>
        body { font-family: Arial, sans-serif; padding: 20px; }
        .form-group { margin: 15px 0; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input[type="text"] { width: 250px; padding: 8px; border: 1px solid #ccc; border-radius: 4px; font-size: 14px; }
        button { background-color: #17a2b8; color: white; padding: 8px 16px; border: none; border-radius: 4px; cursor: pointer; margin-left: 10px; }
        button:hover { background-color: #138496; }
        .selected-date { margin-top: 15px; padding: 10px; background-color: #f8f9fa; border-left: 4px solid #17a2b8; }
    </style>
</head>
<body>
    <h2>Professional Date Picker (DD-MM-YYYY)</h2>
    <div class="form-group">
        <label for="datePicker">Select Date:</label>
        <input type="text" id="datePicker" placeholder="Click to select date" required>
        <button onclick="showSelectedDate()">Show Date</button>
    </div>
    
    <div id="selectedDate" class="selected-date" style="display: none;"></div>

    <script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
    <script>
        // Initialize Flatpickr with DD-MM-YYYY format
        const fp = flatpickr("#datePicker", {
            dateFormat: "d-m-Y",
            allowInput: true,
            defaultDate: "today",
            locale: {
                firstDayOfWeek: 1 // Monday as first day
            }
        });

        function showSelectedDate() {
            const selectedDate = document.getElementById("datePicker").value;
            const resultDiv = document.getElementById("selectedDate");
            
            if (selectedDate) {
                resultDiv.innerHTML = `<strong>Selected Date:</strong> ${selectedDate}`;
                resultDiv.style.display = "block";
            } else {
                resultDiv.innerHTML = `<strong>Please select a date first.</strong>`;
                resultDiv.style.display = "block";
            }
        }
    </script>
</body>
</html>

The output shows a professional date picker interface with calendar dropdown

Select Date: [25-12-2024] [Show Date]
Selected Date: 25-12-2024

Comparison of Methods

Following table compares the different approaches for implementing DD-MM-YYYY date format

Method Pros Cons Best For
Separate Input Fields Simple, no dependencies, precise validation Takes more space, multiple fields to manage Forms with space constraints, precise validation needs
JavaScript Formatting Single input, auto-formatting, lightweight Requires custom validation, basic UI Simple forms, minimal dependencies
Third-party Libraries Professional UI, feature-rich, tested External dependency, larger file size Professional applications, enhanced UX
Arunachalam K
Arunachalam K

Software Engineer

Updated on: 2026-03-16T21:38:54+05:30

4K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements