Si a la función date() le proporcionas sólo un parámetro (formato), tomará por default la fecha y hora del servidor.
Si le proporcionas un segundo parámetro, deberá ser la fecha que quieres trabajar, pero en formato timestamp de Unix, para eso puedes usar strtotime()
Una forma más fácil de hacerlo es separando día, mes y año con guión (u otro caracter) y obtenerlos al mismo tiempo con list() y explode()
Aunque también podrías obtener cada variable usando substr(), pero es cosa de que pruebes viendo qué hace cada función y elijas la que mejor te acomode.