If I presume this date field is part of a filtering / search process to identify a short-list of films, and it is designed for use by the general public…
Then I would guess that the majority of searches will be typically “show me all films since 2005” which would require the user to a) read and follow your GUI (onscreen) instructions to enter exactly 2005-01-01 (and not 2005/1/1 etc).
If that is the case I would recommend you reduce the chance of error by having 2 or 3 input boxes. Year / Month and possibly Day (the need for Day might be debatable).
If your film years start in say: 1970 then generate a pick-list of years so:
$years = range(date('Y'), '1970');
var_dump($years);
// 2011
// to
// 1970
That will get you the years you want and in the manner of good e-commerce sites when you come to enter the expiry date of you card you are not allowed to enter the wrong year or enter an out of range year, you have to pick a year.
Optionally - add a third argument to the range,(say 5) and you will have every 5 years instead of 40 items in your picklist.
Repeat with months (ask if you need help)
Repeat with days if you wish. (ditto idem)
Filter and then add the 2 or 3 fields back together on your server, and run it through checkdate() as Anthony has described.
Accepting free text for dates is fraught with problems - depending on just how much you value your users and their input.
If you are sure free text input for dates IS the way to go, for example power-users on an internal CMS or similar, then yes, there are other ways of going about the intelligent filtering/checking of text as dates.
What do you think of the general idea of making users pick dates instead of entering them though?