2017-09-27 4 views
0

格納されている日付は、次のようになりますから取り出さMongodbでのISOの日付は、1日前に表示されるのはなぜですか?

AuthorSchema 
    .virtual('date_of_birth_update_format') 
    .get(function(){ 
     // format in JavaScript date format (YYYY-MM-DD) to display in input type="date" 
     return this.date_of_birth ? moment(this.date_of_birth).format('YYYY-MM-DD') : ''; 
    }); 

:瞬間を使用して

... 
"date_of_birth" : ISODate("1920-01-02T00:00:00Z"), 
... 

、それはこのように(文書を更新するための入力を移入するために)モデルでフォーマットされました収集と表示されたが、それは一日前にこのようなとして表示されます。

01/01/1920 

が、私はこの問題を解決するために、任意の助けをいただければ幸いです。

+1

あなたのタイムゾーンは何ですか? 'moment-timezone'モジュールを使用する必要があります – sidgate

答えて

0

mongoの日付はGMTで、あなたのサーバーは他のタイムゾーンにある可能性があります。フォーマットする前にGMTに日付を変換する必要があります。

var moment = require("moment-timezone") 

AuthorSchema.virtual('date_of_birth_update_format').get(function(){ 
return this.date_of_birth ? moment(this.date_of_birth).tz('GMT').format('YYYY-MM-DD') : ''; 
}); 
+0

ありがとうございます。瞬間が必要(「瞬間」)なので、あなたは瞬間の時間帯が瞬間を置き換えると言っていますか? – JimB814

+0

モーメントタイムゾーンが瞬間を延長します。あなたは瞬間の使用を瞬時のタイムゾーンに置き換えることができます。あなたはすべての瞬間の機能を得るでしょう – sidgate

+0

ありがとう。あなたが提案したように、私はmoment-timezoneをインストールし、自分のコードを変更しました。ただし、この.z( "America/New_York")のように "America/New_York"をtzに渡しました。残念ながら、1月1日ではなく1月2日がDBに表示されます。 – JimB814

0

ISO8601フォーマットのZは、「GMT」すなわち1920-01-02T00:00:00+0000を意味します。モーメントはタイムゾーンを考慮に入れます。米国大陸にいる場合、タイムゾーンオフセットは-0400 - -0800です。

1920-01-02T00:00:00Z = 1920-01-01T6:00:00-0600例えば、太平洋標準時。

+0

ありがとうございます。米国ニューヨーク時間を反映するためにデータがMongodbに保存される方法を変更する必要があると言っていますか? – JimB814

+0

話す方法で。 1920年1月2日の開始日をNYで表したい場合は、それは '1920-01-02T00:00:00-0500'となります。あなたの誕生日を保存するようなので、もしあなたが非常に技術的になりたいのであれば、出身地のタイムゾーンオフセットを使うことができます。 –

+0

ありがとうございます。 @ sidgateのソリューションが動作します。 – JimB814

0

これは、たとえばGMTが私のためにGMTが+5:30なので、私がdbから取得するときはいつでも、日付と一致するように5時30分を追加します。なぜそれは日付をISO形式で格納するので、前日にそれを格納する理由に答えるためです

関連する問題