Поле даты в MongoDB сдвинуто на один час, когда используется Стамбул - PullRequest
0 голосов
/ 08 мая 2018

Я использую mongoose со следующей схемой для ConfigItem:

var ConfigItem = new Schema({   
  name: {
    type: String,
    required: true
  },
  value: {
    type: String,
    required: false
  },
  date: {
    type: Date,
    required: false
  },
  user: {
    type: String,
    required: false
  }
});

Далее у меня есть функция для сохранения документов в соответствии с этой схемой:

function createConfigItem(_name, _value, _date, _user, callback) {
    var config = new ConfigItems({
        name: _name,
        value: _value,
        date: _date,
        user: _user
    });
    config.save(function handleSaveConfig(err) {
        if(callback){
            callback(err);
        }
    });
}

Далее у меня есть модульный тест (на основе мокко), который использует эту функцию следующим образом:

createConfigItem('sftpHost', '1.1.1.1', '2018-03-15 10:06:40.713', 'user1', callback);

Если я запускаю тест под mocha (см. Примечание 1), я получаю следующее на MongoDB:

> db.configitems.find()
{ "_id" : ObjectId("5af173b1f155a4bff29f3e35"), "name" : "sftpHost", "value" : "1.1.1.1", "date" : ISODate("2018-03-15T10:06:40.713Z"), "user" : "user1", "__v" : 0 }

что я и ожидаю.

Однако, если я запускаю с помощью istanbul через grunt (см. Примечание 2), чтобы получить отчет о покрытии, тот же вызов createConfigItem () создает следующие документы в БД:

> db.configitems.find()
{ "_id" : ObjectId("5af176cbcffb8cc20a1fe3c2"), "name" : "sftpHost", "value" : "1.1.1.1", "date" : ISODate("2018-03-15T09:06:40.713Z"), "user" : "user1", "__v" : 0 }

Обратите внимание, что в этом случае поле date в БД сдвигается на один час относительно строкового параметра _date.

Я думал, что это может быть как-то связано с часовыми поясами, но я обеспечил выполнение моего процесса в настройках UTC process.env.TZ = 'UTC'.

Я немного растерялся ... Есть ли известная проблема, связанная с мангустами / ворчаниями / Стамбулом в отношении дат и / или часовых поясов? Любой намек на эту проблему, пожалуйста?

Примечание1 : использованная команда:

/home/fermin/.nvm/versions/node/v6.12.3/bin/node --debug-brk=50806 --expose_debug_as=v8debug /home/fermin/src/ctxmboard/node_modules/mocha/bin/_mocha --timeout 0 --ui bdd --reporter /home/fermin/.PyCharm2018.1/config/plugins/NodeJS/js/mocha-intellij/lib/mochaIntellijReporter.js --recursive /home/fermin/src/ctxmboard/test/back/unit

Примечание2 : использованная команда:

/home/fermin/.nvm/versions/node/v6.12.3/bin/node --debug-brk=33002 --expose_debug_as=v8debug ./node_modules/.bin/istanbul cover --root lib/ --dir site/coverage -- /home/fermin/.nvm/versions/node/v6.12.3/lib/node_modules/grunt-cli/bin/grunt test

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

вы можете использовать модуль узла момента https://momentjs.com/docs/

var date=moment.utc().toDate();
0 голосов
/ 08 мая 2018

Как предлагается в одном из комментариев к вопросу, при использовании строгого формата ISO8601, изменение

'2018-03-15 10:06:40.713'

от

'2018-03-15T10:06:40.713Z'

решил проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...