Конструктор дат
Что не так?
String(new Date(2015, 0)) === String(new Date('2015-01')) // false
      
        Первое января, которое создаётся конструктором new Date из нескольких аргументов не равно первому
        января, созданному конструктором new Date из строки в ISO-формате.
      
Почему так?
А что же создаётся в том и другом случае?
 
String(new Date(2015, 0))   // "Thu Jan 01 2015 00:00:00 GMT+0300"
String(new Date('2015-01')) // "Thu Jan 01 2015 03:00:00 GMT+0300"
      Ух ты. Смещение часового пояса. Друг мой, а почему ж ты в одном случае учитываешься, а во втором — нет?
Обратимся к документации, там наверняка есть логичное объяснение.
Обратите внимание: если функция
© MDNDateвызывается в качестве конструктора с более чем одним аргументом, то указанные аргументы интерпретируются как локальное время. Если аргументы указывают время в UTC, используйтеnew Date(Date.UTC(...))с теми же аргументами.
Иными словами
      Что же делать?
Читать документацию, работать с датами только одним из этих способов, либо черёз обёртки.