Moment: カレンダー時間のコールバック関数形式は、破損した月の文字列を返します

作成日 2017年03月28日  ·  3コメント  ·  ソース: moment/moment

コールバック関数を渡して、カレンダー時間を使用して日付をフォーマットしようとしました。 ただし、コールバックのelse条件では、フォーマットされた日付の月が正しくありません。

JanJamnとして返されます
Mar3amrとして返されます
FebF0bとして返されます

私はこれを間違っているかもしれませんが、月がエラーをスローせずにこのように戻ってくるのは奇妙に思えます。

再現するコード

export const dateConversion = (date) => {
  // Assuming date comes in 'YYYY-MM-DD` format
  date = moment(date, 'YYYY-MM-DD');
  return date.calendar(null, {
    sameDay: '[Today]',
    nextDay: '[Tomorrow]',
    lastDay: '[Yesterday]',
    nextWeek: 'ddd',
    lastWeek: 'MMM D',
    sameElse: function(now) {
      if (this.isSame(now, 'year')) {
        return this.format('MMM D');
      } else {
        // Month is incorrectly parsed here 
        return this.format('MMM D, YYYY');
      }
    }
  });
}

環境
2017年3月28日火曜日16:52:21GMT-0400(EDT)
2017年3月28日、午後4時52分21秒
240
Mozilla / 5.0(Macintosh; Intel Mac OS X 10_11_6)AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 56.0.2924.87 Safari / 537.36
2.17.1

最も参考になるコメント

nevermind-間違った値を返していました。

全てのコメント3件

nevermind-間違った値を返していました。

@dbshwang私は同じ問題を抱えています。 解像度を入れていただけませんか

@ avi-meslati-sp実際のフォーマットされた日付ではなく、フォーマット用の文字列のみを返す必要があります。 だから私の場合:

sameElse: function(now) {
  if (this.isSame(now, 'year')) {
      return this.format('MMM D');
  } else {
      return this.format('MMM D, YYYY');
  }
}

実際にする必要があります

sameElse: function(now) {
  if (this.isSame(now, 'year')) {
      return 'MMM D';
  } else {
      return 'MMM D, YYYY';
  }
}
このページは役に立ちましたか?
0 / 5 - 0 評価