В PHP из коробки есть мощнейший парсер дат:
php.net/manual/ru/datetime.formats.php
То есть вы можете писать такое:
new \DateTime('first monday of this month'); // 2016-11-07
new \DateTime('first sunday of November 2016'); // 2016-11-06
так же с датами можно производить манипуляции, сравнения и т.д.
И как можно реализовать подгружение месяцев при щелчке, например, на кнопку 'далее'?
Будьте последовательны. Сначала выведите календарь на этот месяц. Затем сделайте так, что бы можно было смотреть календарь за любой месяц любого года. Затем погуглите как делать http запросы средствами javascript.
p.s. такие вещи проще и удобнее делать целиком на клиенте. Не говоря о том что лучше взять существующий календарь.