2016-04-12 20 views
3

文字列ではなく日付型のスキーマを宣言すると問題が発生します。mongooseとexpress.jsで競合する日付

ケースI:このシェマ宣言で

var MySchema = new Schema({ 
    created_at: {type: String, default: ''} 
}); 

私は、アジア/コルカタのタイムゾーンの現在時刻を宣言するためmoment.js moment-timezoneモジュールを使用しています。

var tmoment = require('moment-timezone'); 
var currentTime = tmoment().tz('Asia/Kolkata').format('llll'); 

そして、私は正しい時間を得ることができます。

ケースII:このシェマ宣言で

var MySchema = new Schema({ 
    created_at: {type: Date, default: ''} 
}); 

は私がアジア/コルカタのタイムゾーンの現在時刻を宣言するためmoment.js moment-timezoneモジュールを使用しています。

var tmoment = require('moment-timezone'); 
var currentTime = tmoment().tz('Asia/Kolkata').format('llll'); 

しかし、今の時間は、時間帯に応じて来ていません。私も解決策を見つけることができませんでした次の宣言

var tmoment = require('moment-timezone'); 
var currentTime = tmoment().tz('Asia/Kolkata').format(); 

しかしてみました。

+0

これ以上コンテキストを提供できますか?私はこれをローカルに設定し、正しく動作しました。 – csum

+0

'format()'を呼び出すと、文字列が出力されます。したがって、日付オブジェクトを与える 'var currentTime = tmoment()。tz( 'Asia/Kolkata')'を試してください。 – mani

+0

@maniこれをやってみましたが、 '2016-04-13T11:39:27.942Z一方、ケースIによれば、 'Wed、Apr 16、2016 5:09 PM' – amanpurohit

答えて

0

日付をmongoデータベースに保存するときは、タイムゾーンに関係なく、JavaScriptのDateオブジェクトを保存するだけで済みます。 (ケース2と同様にDateタイプを使用します)。次に、の表示に、必要な時間帯の日付を使用します。データベースからオブジェクトを読み、[ローカライズされた日付文字列を表示するには

var id = ... 
var saveReq = new RequestModel({ _id: id, created_at: new Date() }); 
saveReq.save(function (err, result) { 
    // ... 
}); 

:あなたの地域のタイムゾーンに

var tmoment = require('moment-timezone'); 
RequestModel.findOne({_id: id}, function (err, doc) { 
    if(err) {} // ... 
    var created = doc.created_at; 
    var display = tmoment(created).tz('Asia/Kolkata').format('llll'); 
    console.log(display); 
}); 
+0

この解決策は、2つの日付の間でデータをフィルタリングするという私の問題を解決するだけでなく、日付を変更することもできると思います(この場合、エラーが発生した場合はエラーが発生します)特定のタイムゾーンから標準のjs形式に変換してから、フィルタロジックを適用します。ありがとう。 !!大きな助け。 ! – amanpurohit

0

変更サーバーのタイムゾーンをオブジェクトを保存するには

関連する問題