Should a date field be pre-filled or left blank for hotel and flight booking forms?
For example should i keep date field un-selected by default like this
or with dates of next 3-4 days. and user can change if he want
I don't think it's necessary to pre-fill the date fields with dates of the next 3-4 days. Doing so may actually make things more confusing, since most booking sites leave the check-in/check-out date fields un-selected (showing just mm/dd/yyyy until the user selects the field).
Airbnb has one of the more usable booking UIs I've experienced, so I'll use it as an example to illustrate. Here, the dates aren't pre-selected:
After the user selects the check-in field, it makes sense to pre-select the current day's date on the calendar:
Once a user selects a check-in date on the calendar, you can go ahead and pre-populate the check-out date to show exactly one day later, since it's safe to assume they can't select a check-out day in the past.
Below, a user hovers his mouse over his desired check-in date on the calendar:
Once the user clicks on his desired check-in date, the cursor auto-tabs (or automatically jumps) to the check-out field, opening the calendar to the next day.
I would recommend keeping it filled in since it gives me (as an user) a sense of direction about what the current state is (i.e. what is the date) without requiring me to check on the computer or check with someone and then I can just update the information as I need.
However there is a possibility of a someone entering the start or end dates wrong,so always ensure that before the final booking you clearly highlight the dates of booking
Edit : That would depend on what your site is for,Most travel sites keep the start date as the current date and the end date as a week from the start date but if you are doing bookings for hotels,you might have look at shorter duration's. Frankly speaking the basic idea is not to deduct what date the users might want to book but to just make their life easier by providing them the current date and giving them a direction forward.
Like in your first example I might end up entering May 1'st if I am not careful and if you neglected to build the validation in,then I could end up booking the tickets from a date in the past.
That said I'll admit Expedia doesn't pre-populate dates but they do a good job of telling the user about the options by using a highlighted dropdown as shown below :
Pre-filling solves the problem to relieve the user from the hassle to fill the form. If I want to check that I like the site, I want to do it with minimal hassles.
Next and more specifically - what if I don't have the dates? What if dates don't matter? Show me some results the best you can and if I like what I see - THEN I am ready to work!
What is the obvious choice? Current date, current location, for one night? Why not? If I want to change it, make it easy for me and I am happy.
What is the alternative? Showing empty spaces and forcing me to fill only to find the site is not for me?