Mongoose a new Date()

Pokud v NodeJS používáte pro práci s databázi MongoDB knihovnu Mongoose a snažíte se ulehčit si práci při ukládání dat do collections skrze defaultní hodnotu prvku jako já:

var mongoose = require('mongoose');
var hist = mongoose.Schema({
  timeStamp: {
    type: Date,
    default: Date.now()
  }
});

Pak se dočkáte nemilého překvapení, že vám nebude čas v databázi sedět s reálným časem. Až jako já prohledáte všechny možnosti kde se na vašem serveru nastavuje timezone a zjsitíte, že máte vše OK, začnete pátrat kolem MongoDB, respektive přímo v Mongoose…

UTC

No a pak zjisíte, že váš čas je ukládán v UTC, a proto nesedí.

clock-change-time-dst

Řešení

Protože jsem v databázi měl opravdu skutečný čas, je potřeba zrušit hodnotu default v definici mongoose schematu vaší collection a datum s časem si vypočítat sám:

var utc = new Date();
utc.setHours( utc.getHours() + 2);
var mujCas = utc;