Very early on in my programming career (1997), I was told, “the main difference - no - the only difference between an amateur and professional is the ability to estimate the time it will take to complete a project”. By that definition (and several others), I’m still an amateur. Of course, I try not to tell that to my customer.
And that’s the problem, in my opinion, with wide estimations for consultants. When you say, “I’ll deliver what you want, and it will take anywhere between two weeks and two months”, it sends a strong message that I don’t know what I’m doing. That I’m an amateur. I’m better off saying “three weeks, no more!”, sounding like a professional, and then extending the deadline with excuses, if need be. This sounds terrible, and it hurts the customer, but at least I got the job in the first place.
I think the best, most honest answer to the question, “How long will this project take you?” is the answer, “I don’t know, but within a week of research, I’ll be able to give you an educated guess”. Of course that week might turn into two.