2017-01-09 1 views
0

나는 지난 2 시간 동안 머리카락을 찢어 놓았습니다. 처음에는 모멘트 .js가 올바른 시간을 반환하지 못했다고 생각했지만, 몽구스 날짜였습니다. 악의적 인 일을하고 있습니다.몽구스 Date.now 시간이 정확하지 않습니다.

다음은 내가 두 개의 필드가 볼 수 있듯이, 하나 몽구스에서 기본 날짜이고, 다른 하나는 날짜를 저장하기위한 단지 필드 코드를

const moment = require('moment'); 
const mongoose = require('mongoose'); 

const item = new mongoose.Schema({ 
    time: { type: Date, default: Date.now }, 
    time2: { type: Date } 
}); 

을합니다.

item.pre('save', function() { 
    console.log(moment()); // Showing a correct date and time 
    console.log(this.time); // Showing a correct date but false time 
    this.time2 = moment(); // When it is saved to the database, it will show a correct date but false time 

}); 

결과는

moment("2017-01-09T19:42:48.896") // the first console.log. This is correct, the time is correct 
2017-01-09T11:42:48.884Z // Second console.log. The date is correct but the time is FALSE 

나는이 모든

const item = new mongoose.Schema({ 
     time: { type: Date, default: moment() }, 
     time2: { type: Date, default: Date.now } 
}); 

를 해결할 수 않으면 내가 생각입니다하지만 당신은 time 첫 번째 필드의 CONSOLE.LOG 무엇인지 ?

2017-01-09T11:42:48.884Z // it is this time which is WRONG TIME 

내 생각 엔 날짜가 mongoose 데이터 형식이 정확하지 않은 시간대 확인을 사용합니다.

도움을 주시면 감사하겠습니다.

+0

mongodb가 UTC 형식으로 저장되어있는 것처럼 보입니다. 시간대가 utc보다 몇 시간 앞서 있는지, 내 시간대는 무엇입니까? –

+0

두 가지 다른 점을 비교하고 있습니다. moment()는 현지 시간대로 시간을 제공하고 Date.now는 UTC (세계 표준시)로 시간을 나타냅니다. 몽구스가 그렇게하는 유일한 이유는 몽고가 그것을 그렇게 저장하기 때문입니다. 여기서 해결할 것이 없습니다. 순간 라이브러리를 사용하여 가져온 몽구스 날짜를 로컬 시간대로 다시 변환하십시오. 시간대에 대해 조금씩 읽는다면 의미가 있습니다. – Veeram

+0

@SagarRedd 여기에 답을 넣어서 받아 들일 수 있습니까? – sinusGob

답변

1

두 가지를 비교하고 있습니다. moment()은 현지 시간으로 시간을 제공하며 Date.now은 UTC 시간입니다. mongoose가 그렇게하는 유일한 이유는 mongo db가 그렇게 저장하기 때문입니다. 여기에 수정이 필요하지 않습니다.

가져온 몽구스 날짜를 순간 라이브러리를 사용하여 현지 시간대로 변환하면됩니다.