Express.js内からビューをレンダリングするためにJadeを使用しています。 MongoDBにドキュメントを保存し、Mongooseを使用してドキュメントにアクセスしています。新しいドキュメントが作成されたときに作成されたデフォルトの日付を保存し、その日付が作成された属性をビューに返します。 MongoDBに保存される日付の形式は次のとおりです。
Thu Dec 29 2011 20:14:56 GMT-0600 (CST)
私の質問は、MongoDBから戻ってくるJade(またはMongooseまたはNode.JS)でこの日付をどのようにフォーマットすればよいですか?
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 を必ずチェックアウトする必要があります。
私はまさにこの要件(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}
簡単な方法を試していないと思いますか?
#{storeddate.toDateString()}
実際、_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();
});
これを行う方法の例を次に示します(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
非常に簡単な方法ステップ
npm moment --saveでインストールします
var moment = require( 'moment');を宣言します。
res.render'filename.ejs '、{moment:moment})で宣言変数を定義します。
ビューファイルにこのejsを入れます<%= moment(data.column_name_of_your_date).format( 'DD MMM YYYY'); %>
出力は-2017年6月9日
形式を変更することができます。別の形式のリンクをチェックしてください http://momentjs.com/
私の解決策は次のとおりです。
momentjs を次のようにExpressアプリケーションのローカルに追加します。app.locals.moment = require('moment');
その後、任意のjadeファイルでモーメントを使用できます。span='(Created at: ' + moment(obj.createTime).format("YYYY/MM/DD") + ')'