if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts))
infatti è come ti dicevo, per lui la data è valida solo nel formato "indiano"
anche la regex è comprensibile, quella di prima no.
allora, devi capire cosa fa quella regex:
[0-9]{4} -> la prima parte della stringa deve essere un numero da 0 a 9 ripetuto 4 volte
[0-9]{2} -> segue un numero da 0 a 9 ripetuto 2 volte
[0-9]{2} -> segue un numero da 0 a 9 ripetuto 2 volte
... in mezzo vedi anche i trattini.
Ora dimmi tu come correggerla

Maurizio