Z означава "отместване на нула часа", известно също като "зулу време" (UTC). Когато заявявате датата от базата данни, има два възможни сценария датата да се промени или в слоя на базата данни, или в слоя на приложението, като я коригира към часовата зона, в която се намирате.
Така например, ако настройката на базата данни спестява време автоматично до UTC, когато получите действителните данни, тя ще бъде преобразувана във вашата текуща часова зона. Но от вашия пример 2016-12-20 се преобразува в 2016-12-19T23:00:00.000Z, тогава предполагам, че настройката на вашата база данни на дата я записва в определена часова зона, след което я преобразува в UTC.
За да го поправите, опитайте да коригирате логиката на приложението или настройката на базата данни, за мен предпочитам да го правя на ниво приложение и да поддържам датата в DB, за да бъде запазена в UTC.
Опитайте това, за да видите разликата и може да ви подскаже как да разрешите проблема си:
var currentDate = new Date();
var isoDate = currentDate.toISOString();
console.log(currentDate, isoDate);