Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dates in mongoose?

I know that I can set Date.now as a default value in a mongoose schema, but what other Javascript date types or are all dates automatically converted to mongodb´s standard format - ISOdate?

Are there anything I should be concerned about when it comes to storing dates?

dates: {
    created:  {type: Date, default: Date.now},
}

Thanks

like image 997
Industrial Avatar asked Sep 06 '25 09:09

Industrial


2 Answers

The only thing you should take care of is converting the MongoDB/BSON UTC date to your local timezone (in case you need this).

For more info checkout: http://docs.mongodb.org/manual/reference/bson-types/#document-bson-type-date

like image 82
alessioalex Avatar answered Sep 08 '25 21:09

alessioalex


Mongoose date casting has a couple of small cases where it differs from JavaScript's native date parsing.
You might be interested in reading how to work with dates, to better understand casting errors and common pitfalls: https://mongoosejs.com/docs/tutorials/dates.html.

  1. Mongoose looks for a valueOf() function on the given object, and calls valueOf() before casting the date. This means Mongoose can cast moment objects to dates automatically.
const moment = require('moment');
const user = new User({
  name: 'Jean-Luc Picard',
  lastActiveAt: moment.utc('2002-12-09')
});
user.lastActiveAt; // "2002-12-09T00:00:00.000Z"
  1. By default, if you pass a numeric string to the Date constructor, JavaScript will attempt to convert it to a year.

    new Date(1552261496289); // "2019-03-10T23:44:56.289Z"
    new Date('1552261496289'); // "Invalid Date"
    new Date('2010'); // 2010-01-01T00:00:00.000Z

Mongoose converts numeric strings that contain numbers outside the range of representable dates in JavaScript and converts them to numbers before passing them to the date constructor.

like image 41
Gal Margalit Avatar answered Sep 08 '25 21:09

Gal Margalit