18

私はindex.jsを持っています:

exports.index = function(req, res){
  db.courses.find(function(err, currentCourses) {
    res.render('index', {
      currentCourses: currentCourses
    });
  });
};

そして私の翡翠のテンプレートで:

tr
    td #{currentCourses[0].start}

これは、「Sun Sep 29 2013 00:00:00 GMT+0100 (BST)」の形式の日付です。

「2013 年 9 月 29 日」にフォーマットするにはどうすればよいですか?

編集(Ed Hinchliffeのコメントの後):

-function prettyDate(dateString){
    -var d = date.getDate(dateString);
    -var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
    -var m = monthNames[date.getMonth()];
    -var y = date.getFullYear();
    -return d+' '+m+' '+y;
-} 
for course in currentCourses
    tr
        td #{prettyDate(course.start)}
4

5 に答える 5

62

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

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

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

参考:
サーバー側の Jade テンプレートでユーティリティ ライブラリを利用する

于 2014-09-20T16:33:30.803 に答える
11

残念ながら特に簡単ではありません。テンプレートの内側または外側で文字列をフォーマットする関数が必要です (そしてきれいな文字列を渡します)。

こんな感じ (JADE)

-function prettyDate(dateString){
    //if it's already a date object and not a string you don't need this line:
    -var date = new Date(dateString);
    -var d = date.getDate();
    -var monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
    -var m = monthNames[date.getMonth()];
    -var y = date.getFullYear();
    -return d+' '+m+' '+y;
-}


tr
   td #{prettyDate(currentCourses[0].start)}
于 2013-06-04T16:17:07.407 に答える
6

Zhifeng Huの上記のソリューションは、正しい方向性を示してくれました。残念ながら app.locals.moment はうまくいきませんでした。

ただしrequire('moment') 、テンプレート属性のオブジェクトに直接渡すこともできます。

var data = {
  title: 'some nice title',
  updateDate: new Date(),
  ....,
  moment: require( 'moment' )
};

次に、データ オブジェクトを通常どおりテンプレート関数に渡します。

var template = pug.compile( source );
var html = template( data );

ソース ファイルの例:

doctype html
html
  head
    title= title
  body
    div= moment(updateDate).format('YYYY-MM-DD')
于 2017-03-01T15:16:54.167 に答える
-3

サーバー側で日付をフォーマットする必要があります。テンプレート内で実行されるロジックの量を最小限に制限します。理想的には、まったく何もしないことです。

于 2014-07-16T15:16:09.157 に答える