Node + Mongodb + ISODate + Timezone issue

RSKMR picture RSKMR · Sep 12, 2016 · Viewed 7.3k times · Source

Hello I am working in node js + mongodb.

When I insert the data into collection the data is stored default ISODate eg. ISODate("2016-06-17T13:00:21.665Z")

I want to insert the date fields should be store in UTC.

Its already stored in UTC format or need to change anything in code ?

Please anyone suggest me.

My Code:

var query = {};
query.created_by = 'admin';
query.created_on = new Date();
var collection = mongoUtil.list;
collection.insert(query, function(err, item) {
    if (!err && item) {
        console.log("success");
    } else {
        console.log("error");
    }

});

Mongo inserted data:

{ "created_by" : "admin", "created_on" : ISODate("2016-06-17T13:00:21.665Z") }

I checked the refference - Mongo UTC Refference From Document:

  1. Date() returns the current date as a string in the mongo shell.
  2. new Date() returns the current date as a Date object. The mongo shell wraps the Date object with the ISODate helper. The ISODate is in UTC.

Answer

notionquest picture notionquest · Sep 12, 2016

Yes, as mentioned in abdulbarik's answer, MongoDB does save the Date in UTC.

Date Object:-

You can use getTimezoneOffset() method to get the difference between UTC and Local Time.

  var d = new Date()
  var n = d.getTimezoneOffset();

  console.log('date obj ==>' + d);
  console.log('time zone obj ==>' + n);

Console log:-

You can see the time zone obj has "-60". I am on GMT+1.

date obj ==>Mon Sep 12 2016 10:17:28 GMT+0100 (GMT Daylight Time)
time zone obj ==>-60

MongoDB has persisted the date in UTC:-

I have used object "d" (i.e. new Date()) to persist the date in MongoDB. Though I am on GMT+1, the date is stored in UTC.

 "timestamp" : ISODate("2016-09-12T09:17:28.193Z"),