You are using the min
attribute correctly. If you want to set the min
value dynamically to today you have two options:
Option 1 - On the server-side.
HTML comes from a server. If a server is dynamically generating this HTML, you can insert today’s date. This is the case if you are using languages like Java, Python, PHP, or NodeJS to generate and return an HTML file.
Here is an example using PHP:
<input type="date" value="<?php echo date('Y-m-d'); ?>" />
Option 2 - On the client side
Maybe the HTML files are static HTML files, which are not generated by a server. This is the case if you are hosting a static site. In that case, you will need to use JavaScript to set the min
attribute after the page has loaded.
// create a function, which returns the current date
Date.prototype.toDateInputValue = (function() {
var local = new Date(this);
local.setMinutes(this.getMinutes() - this.getTimezoneOffset());
return local.toJSON().slice(0,10);
});
// use this function
document.getElementById('dateAppointment').value = new Date().toDateInputValue();
Caution
Both approaches are not tamper proof. A bad actor could visit your page and afterwards use their browser’s developer tools to remove or change that min
attribute. This means appointments could be made in the past.
After a user makes a booking, the booking information will reach a server/service. This server needs to also validate that the appointment date it received is not in the past. If it is in the past, it should refuse to book and throw an error back to the user. — This is why you should always do server-side validation and never trust anything coming from the client-side (the browser).