web-dev-qa-db-ja.com

MongoDBからの日付をフォーマットするにはどうすればよいですか?

Express.js内からビューをレンダリングするためにJadeを使用しています。 MongoDBにドキュメントを保存し、Mongooseを使用してドキュメントにアクセスしています。新しいドキュメントが作成されたときに作成されたデフォルトの日付を保存し、その日付が作成された属性をビューに返します。 MongoDBに保存される日付の形式は次のとおりです。

Thu Dec 29 2011 20:14:56 GMT-0600 (CST)

私の質問は、MongoDBから戻ってくるJade(またはMongooseまたはNode.JS)でこの日付をどのようにフォーマットすればよいですか?

34
naivedeveloper

JavaScriptには日付のサポートが組み込まれています。まず、文字列をDateオブジェクトに取得するには:

date =  new Date('Thu Dec 29 2011 20:14:56 GMT-0600 (CST)')

日付にさまざまなメソッドを使用して、必要なデータを取得できます。

date.toDateString() // "Thu Dec 29 2011"
date.toUTCString()  // "Fri, 30 Dec 2011 02:14:56 GMT"
date.getMonth()     // 11
date.getDate()      // 29
date.getFullYear()  // 2011

より多くのメソッドを見ることができます MDN参照サイトで 。これらのメソッドを使用して、任意の種類の文字列を作成できます。

より堅牢な日付/時刻の解析、フォーマット、および操作については、別の回答でs3v3nが言及しているように、 Moment.js を必ずチェックアウトする必要があります。

48
Michelle Tilley

私はまさにこの要件(expressjs、mongoose、jade)を持っていました。これが私が自分で解決した方法です。

まず最初に momentjs with npm install moment。次に、これを使用して表示する瞬間を渡しました:

var moment = require('moment');

app.get('/', function(req, res){
    // find all jobs using mongoose model
    Job.find().exec(function(err, items){
        // pass moment as a variable
        res.render('status', { 'jobs': items, moment: moment });
    })
});

次に、Jadeで次のように使用します。

table
  tr
    td Subject
    td Posted at
    td Status
  each job, i in jobs
    tr
      td #{job.subject}
      td #{moment(job.postedAt).format("YYYY-MM-DD HH:mm")}
      td #{job.status}
63
s3v3n

簡単な方法を試していないと思いますか?

#{storeddate.toDateString()}
15
Wes Brown

実際、_idにはその情報があるため、作成日を保存するためにMongooseスキーマに別の属性は必要ありません。代わりに、次のようにMongooseスキーマに virtual を作成できます。

YourSchema.virtual('date')
  .get(function() {
    return this._id.generationTime;
  });

これは、各ドキュメントの.date属性として生のJavaScript日付を返します。

その後、さらに一歩進んで、その仮想で希望する日付をフォーマットできます。

YourSchema.virtual('date')
  .get(function() {
    return this._id.generationTime.toDateString();
  });
5
danmactough

これを行う方法の例を次に示します(EJSを使用)

   <%

    var monthNames = [
    "January", "February", "March",
    "April", "May", "June", "July",
    "August", "September", "October",
    "November", "December"
    ];

    var d = post.date.getDate();
    var m = monthNames[post.date.getMonth()];
    var y = post.date.getFullYear();

    %>

これで、これらの変数を次のように使用できます...

<small style="color: red"><%= post.date  %></small>

ソース: https://medium.com/@littlelostify/how-to-format-mongoose-crappy-date-10df67d7a2d6

2
AmJustSam

非常に簡単な方法ステップ

  1. npm moment --saveでインストールします

  2. var moment = require( 'moment');を宣言します。

  3. res.render'filename.ejs '、{moment:moment})で宣言変数を定義します。

  4. ビューファイルにこのejsを入れます<%= moment(data.column_name_of_your_date).format( 'DD MMM YYYY'); %>

出力は-2017年6月9日

形式を変更することができます。別の形式のリンクをチェックしてください http://momentjs.com/

0

私の解決策は次のとおりです。

momentjs を次のようにExpressアプリケーションのローカルに追加します。
app.locals.moment = require('moment');

その後、任意のjadeファイルでモーメントを使用できます。
span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'

リファレンス: サーバーサイドJadeテンプレートでユーティリティライブラリを使用する

0
Zhifeng Hu