Zは、「ズールー時間」(UTC)とも呼ばれる「ゼロ時間オフセット」を意味します。データベースから日付を照会する場合、データベース層またはアプリケーション層のいずれかで日付が変更され、現在のタイムゾーンに合わせて調整されるという2つのシナリオが考えられます。
したがって、たとえば、データベース設定が実際のデータを取得したときに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);