8

私はmoment.js、人間が読める形式で期間をフォーマットするために使用します。
たとえば、(dDateオブジェクトです):

moment(d).subtract("days", 3).from(d) // 「3日前」を返します

「2週間前」を取得したいのですが、以下のコードは期間を日数で返します

moment(d).subtract("weeks", 2).from(d) // 「14 日前」または「2 週間前」を返します

で「2週間前」を取得するにはどうすればよいmoment.jsですか?

4

6 に答える 6

9

カスタム コールバック関数を使用すると、これを非常に簡単に行うことができます。

moment.relativeTime.dd = function (number) {
    // round to the closest number of weeks
    var weeks = Math.round(number / 7);
    if (number < 7) {
        // if less than a week, use days
        return number + " days";
    } else {
        // pluralize weeks
        return weeks + " week" + (weeks === 1 ? "" : "s"); 
    }
}

http://jsfiddle.net/timrwood/sWsXQ/

于 2012-08-03T23:57:02.127 に答える
5

以前の回答にコメントすることはできませんが、更新された回答を残したいと思いました(timrwoodに基づく)

moment.locale('en', {
  relativeTime : {
    future: "in %s",
    past:   "%s ago",
    s:  "seconds",
    m:  "a minute",
    mm: "%d minutes",
    h:  "an hour",
    hh: "%d hours",
    d:  "a day",
    dd: function (number) {
      var weeks = Math.round(number / 7);
      if (number < 7) {
        // if less than a week, use days
        return number + " days";
      } else {
        // pluralize weeks
        return weeks + " week" + (weeks === 1 ? "" : "s"); 
      }
    },
    M:  "a month",
    MM: "%d months",
    y:  "a year",
    yy: "%d years"
  }
});

$window.moment.relativeTimeThreshold('d', 340); // if you want weeks instead of months, otherwise put a 28 or so.
于 2015-04-24T19:11:41.777 に答える
1

共有し、まだ役立つことを願っています:

var aPastDate = moment().subtract(5,'months');
var now = moment();


moment.fn.durationInWeeks = function (fromDate, toDate) {

   var weeks =  toDate.diff( fromDate, 'weeks' );
   return weeks + ' weeks ago'; //your own format

}

moment().durationInWeeks(aPastDate,now);

//"21 weeks ago"
于 2016-01-28T21:32:45.220 に答える
1

ドキュメントには、これらの文字列を作成するためのルールがリストされています (「別の瞬間から時間を人間化する」の下)。を変更することで文字列を変更できますがmoment.relativeTime、これは数字の周りに表示されるテキストに限定されます。つまり、日を週に変更することはできません。

moment.jsこの機能を実装するには、カスタム コードを拡張または作成する必要があります。

于 2012-07-12T10:59:42.460 に答える