
Para proceder a restar dos fechas en PHP podemos usar funciones en forma procedural o usar el estilo orientado a objetos. En este post me inclinare por el segundo.
La documentación sobre este tema se encuentra aquí:
En la documentación se pueden ver las funciones (para el que use procedural) y 5 clases (DateTime, DateTimeImmutable, DateTimeZone, DateInterval, DatePeriod) mas una Interface (DateTimeInterface).
Preparando el terreno
Primero vamos a crear una instancia de la clase DateTime.
$date = new DateTime();
Al hacer esto por defecto DateTime usa la hora actual. Pero para asegurarnos de que esta se la hora de nuestro pais vamos a definir el time zone:
$date = new DateTime();
$date->setTimeZone( new DateTimeZone('America/Buenos_Aires'));
Observen que el método setTimeZone recibe un objeto DateTimeZone. La lista de time zone soportados esta aqui (todo en la documentación):
Ok para ver todo esto en pantalla no podemos hacer un echo asi de simple porque tratamos con un objeto y echo no imprime objetos en pantalla. Debemos usar format, metodo de la clase DateTime:
echo $date->format('Y-m-d H:i:s');
Format recibe un string donde Y m d H i s son símbolos que representan el formato. No explore mucho esto pero aqui mas información:
Quiere decir que si quisiéramos poner las fechas en el orden dia/mes/año pondríamos el string 'd/m/Y'. Noten que no use - sino /. Tampoco incluí el tiempo 'H:i:s' por lo cual en pantalla ser veria solo la fecha 01-07-2014.
Restar fechas

Para restar usaremos diff. Los metodos diff y format provienen de la interface DateTimeInterface pero se implementan en DateTime como pueden observar aqui:
$date = new DateTime();
$date2 = new DateTime('2014/06/27');
$date->setTimeZone( new DateTimeZone('America/Buenos_Aires') );
$interval = $date->diff( $date2 );
echo $interval->format('%a dias');
Esto es hoy 01/07/2014 menos 27/06/2014, si ejecutamos el código anterior debería darnos 4 dias.
Cuando usamos el metodo diff este nos devuelve un objeto DateInterval. En los metodos de date interval tambien tenemos un metodo format pero este tiene una implementacion diferente que en la clase DateTime. Aqui los caracteres de formato van precedidos de %. Mas info:
Si quisiera la cantidad de meses resultantes al restar dos fechas usaríamos el caracter de formato %m. Si resto 01/07/2014 - 30/06/2014 el resultado en meses sera 0, si resto 01/07/2014 - 27/05/2014 el resultado sera 1.