De Z betekent "zero hour offset" ook wel bekend als "Zulu time" (UTC). Wanneer u de datum uit de database opvraagt, zijn er twee mogelijke scenario's dat de datum verandert, ofwel in de databaselaag of op de applicatielaag, door deze aan te passen aan de tijdzone waarin u zich bevindt.
Dus als de database-instelling bijvoorbeeld automatisch tijd opslaat naar UTC wanneer u de werkelijke gegevens hebt ontvangen, wordt deze geconverteerd naar uw huidige tijdzone. Maar uit uw voorbeeld is 2016-12-20 geconverteerd naar 2016-12-19T23:00:00.000Z, dan neem ik aan dat uw database-instelling op datum het opslaat in een bepaalde tijdzone en het vervolgens converteert naar UTC.
Om het op te lossen, probeert u uw toepassingslogica of database-instelling aan te passen, voor mij doe ik het liever op toepassingsniveau en behoud de datum in DB om op te slaan in UTC.
Probeer dit om het verschil te zien en kan u een hint geven over het oplossen van uw probleem:
var currentDate = new Date();
var isoDate = currentDate.toISOString();
console.log(currentDate, isoDate);