JavaScript初心者でもわかる!date-fnsで日付と現在の日時の差を表示する

2024-04-02

date-fnsのformatDistanceToNow関数:分かりやすく解説

date-fnsformatDistanceToNow関数は、指定された日付と現在の日時の差を、人間が読みやすい形式で表示するための便利なヘルパー関数です。

使い方

import { formatDistanceToNow } from 'date-fns';

// 例:現在から3日前の日付
const date = new Date(2024, 3, 19);

// 日本語で表示
const distance = formatDistanceToNow(date, { locale: ja });
console.log(distance); // => "3日前"

// 英語で表示
const distanceEn = formatDistanceToNow(date, { locale: en });
console.log(distanceEn); // => "3 days ago"

オプション

formatDistanceToNow関数には、以下のオプションを設定できます。

  • locale: 表示言語を指定します。デフォルトは英語です。日本語の場合はjaを指定します。
  • addSuffix: 過去の日付の場合はago、未来の日付の場合はfrom nowのような接尾辞を追加します。デフォルトはtrueです。
  • unit: 時間の単位を指定します。デフォルトは'second'です。
  • roundingMethod: 時間の丸め方を指定します。デフォルトは'floor'です。

詳細は date-fns公式ドキュメント: [無効な URL を削除しました] を参照してください。

// 1時間前
const oneHourAgo = formatDistanceToNow(new Date(Date.now() - 3600000));
console.log(oneHourAgo); // => "1時間前"

// 1週間後
const oneWeekFromNow = formatDistanceToNow(new Date(Date.now() + 604800000));
console.log(oneWeekFromNow); // => "1週間後"

// 1ヶ月前、英語で、接尾辞なし
const oneMonthAgoEn = formatDistanceToNow(new Date(Date.now() - 2592000000), {
  locale: en,
  addSuffix: false,
});
console.log(oneMonthAgoEn); // => "1 month ago"

date-fnsformatDistanceToNow関数は、日付と現在の日時の差を分かりやすく表示するのに役立ちます。オプションを使いこなすことで、さまざまな表示形式を実現することができます。



formatDistanceToNow 関数のサンプルコード

過去の日付

  • 1時間前
const oneHourAgo = formatDistanceToNow(new Date(Date.now() - 3600000));
console.log(oneHourAgo); // => "1時間前"
  • 3日前
const threeDaysAgo = formatDistanceToNow(new Date(2024, 3, 19));
console.log(threeDaysAgo); // => "3日前"
  • 1ヶ月前
const oneMonthAgo = formatDistanceToNow(new Date(Date.now() - 2592000000));
console.log(oneMonthAgo); // => "1ヶ月前"
  • 1年前
const oneYearAgo = formatDistanceToNow(new Date(2023, 3, 22));
console.log(oneYearAgo); // => "1年前"

未来の日付

  • 1時間後
const oneHourFromNow = formatDistanceToNow(new Date(Date.now() + 3600000));
console.log(oneHourFromNow); // => "1時間後"
  • 3日後
const threeDaysFromNow = formatDistanceToNow(new Date(2024, 3, 25));
console.log(threeDaysFromNow); // => "3日後"
  • 1ヶ月後
const oneMonthFromNow = formatDistanceToNow(new Date(Date.now() + 2592000000));
console.log(oneMonthFromNow); // => "1ヶ月後"
  • 1年後
const oneYearFromNow = formatDistanceToNow(new Date(2025, 3, 22));
console.log(oneYearFromNow); // => "1年後"

オプションの利用

  • 日本語で表示
const date = new Date(2024, 3, 19);
const distanceJa = formatDistanceToNow(date, { locale: ja });
console.log(distanceJa); // => "3日前"
  • 英語で表示
const date = new Date(2024, 3, 19);
const distanceEn = formatDistanceToNow(date, { locale: en });
console.log(distanceEn); // => "3 days ago"
  • 接尾辞なし
const date = new Date(2024, 3, 19);
const distanceNoSuffix = formatDistanceToNow(date, { addSuffix: false });
console.log(distanceNoSuffix); // => "3"
  • 時間を単位として表示
const date = new Date(2024, 3, 19);
const distanceHours = formatDistanceToNow(date, { unit: 'hour' });
console.log(distanceHours); // => "72時間前"
  • 時間を切り捨てて表示
const date = new Date(2024, 3, 19);
const distanceFloor = formatDistanceToNow(date, { roundingMethod: 'floor' });
console.log(distanceFloor); // => "3日前"
  • 時間を四捨五入して表示
const date = new Date(2024, 3, 19);
const distanceRound = formatDistanceToNow(date, { roundingMethod: 'round' });
console.log(distanceRound); // => "2日前"
  • 現在の日付と比較
const now = new Date();
const isPast = formatDistanceToNow(now) < 0;
console.log(isPast); // => false
  • 日付オブジェクトを渡す


formatDistanceToNow関数の代替方法

手動で計算する

以下のコードは、日付と現在の日時の差を手動で計算する方法です。

function formatDistance(date) {
  const now = new Date();
  const diff = now - date;

  const days = Math.floor(diff / (1000 * 60 * 60 * 24));
  const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
  const seconds = Math.floor((diff % (1000 * 60)) / 1000);

  if (days > 0) {
    return `${days}日前`;
  } else if (hours > 0) {
    return `${hours}時間前`;
  } else if (minutes > 0) {
    return `${minutes}分前`;
  } else {
    return `${seconds}秒前`;
  }
}

const date = new Date(2024, 3, 19);
const distance = formatDistance(date);
console.log(distance); // => "3日前"

moment.jsは、日付を扱うためのライブラリです。moment.jsを使うと、formatDistanceToNow関数と同様の機能を実現できます。

import moment from 'moment';

const date = moment(2024, 3, 19);
const distance = date.fromNow();
console.log(distance); // => "3日前"

その他のライブラリ

date-fnsmoment.js以外にも、日付を扱うライブラリはたくさんあります。それぞれのライブラリには独自の特徴があるので、自分に合ったライブラリを選びましょう。

formatDistanceToNow関数は、日付と現在の日時の差を分かりやすく表示するのに役立ちます。しかし、手動で計算したり、他のライブラリを使ったりすることもできます。




date-fns の Common Helpers:min 関数で日付操作をもっと便利に

min 関数は、複数の Date オブジェクトを受け取り、最も早い日付を返します。使い方注意点min 関数は、Date オブジェクトのみを受け取ります。比較される日付オブジェクトの時分秒は考慮されません。すべての Date オブジェクトが Invalid Date の場合は、min 関数は Invalid Date を返します。



date-fnsのCommon Helpers:formatISO9075の使い方

引数: date: 日付オブジェクト引数:date: 日付オブジェクト戻り値: フォーマットされた日付文字列 (例: 2024-03-23T20:01:00. 000Z)戻り値: フォーマットされた日付文字列 (例: 2024-03-23T20:01:00


初心者でも安心!date-fnsでRFC7231準拠の日付フォーマットを行うチュートリアル

date-fns の formatRFC7231 は、RFC 7231 標準に従って日付をフォーマットする関数です。これは、HTTP ヘッダーなどの特定の状況で日付を表現する必要がある場合に便利です。使い方formatRFC7231 の使い方は以下の通りです。


date-fns sub関数:使い方、オプション、サンプルコード、その他方法まで完全解説

sub 関数は、date-fns ライブラリの Common Helpers における重要な関数の一つです。この関数は、指定された日付から指定された期間を減算するために使用されます。期間は、日数、週数、月数、年数など、さまざまな単位で指定できます。


date-fns vs moment.js vs Lodash:四半期数を月数に変換するライブラリの比較

quartersToMonths 関数は以下の引数を受け取ります。quarters: 変換したい四半期数。数値または数値に変換できる文字列で指定します。quartersToMonths 関数は、指定された四半期数に相当する月数を返します。この関数は、date-fns バージョン 2.14



date-fns の Interval Helpers で週末を攻略! eachWeekendOfInterval 完全解説

eachWeekendOfInterval は、以下の引数を受け取ります。startDate: 期間の開始日endDate: 期間の終了日fn: 週末ごとに実行される関数この関数は、期間内の すべての週末 をループ処理し、その度に fn 関数を呼び出します。fn 関数は、以下の引数を受け取ります。


JavaScriptで月初を取得する5つの方法(date-fns、Moment.js、Luxonなど)

startOfMonth は、指定された日付の月初めに設定された新しい Date オブジェクトを返します。例えば、2024年3月14日を渡すと、2024年3月1日の0時0分0秒を返します。startOfMonth は以下の引数を受け取ります。


【徹底解説】date-fns Year Helpers:subYears関数完全ガイド

subYears 関数は、指定された日付から指定された年数を引いた新しい日付を返す関数です。例えば、今日から3年を引いた日付を知りたい場合は、次のように記述します。このコードは、today という変数に今日の日付を格納し、subYears 関数を使って3年前にあたる日付を計算し、threeYearsAgo という変数に格納しています。


date-fns sub関数:使い方、オプション、サンプルコード、その他方法まで完全解説

sub 関数は、date-fns ライブラリの Common Helpers における重要な関数の一つです。この関数は、指定された日付から指定された期間を減算するために使用されます。期間は、日数、週数、月数、年数など、さまざまな単位で指定できます。


differenceInCalendarISOWeekYears 関数って?2つの日付間のISO週番号年数の差をカンタンに計算する方法

differenceInCalendarISOWeekYears 関数は、2つの日付間のISO週番号年数の差を計算します。ISO週番号年数は、ISO 8601 規格で定義された年単位の期間で、1月4日から始まり、12月31日まで続きます。使い方