date-fns で特定の年代に属するデータをフィルタリング

2024-04-12

date-fns の getDecade 関数:わかりやすい解説

getDecade 関数の役割

  • 与えられた日付が属する10年単位の期間(年代)を数値で返します。
  • 例えば、2024年4月12日であれば、getDecade(new Date(2024, 3, 12))2020 を返します。

使い方

import { getDecade } from 'date-fns';

const date = new Date(2024, 3, 12);
const decade = getDecade(date);
console.log(decade); // 2020

動作の仕組み

  • getDecade 関数は、まず引数として渡された日付の年を取得します。
  • その年の値を10で割った商を求め、その商を10倍した値を返します。
  • 例えば、2024年であれば、2024 / 10 = 202.4 となり、202.4 * 10 = 2024 となります。
  • 返される値は常に整数となります。

活用例

  • 特定の年代に属するデータをフィルタリング
  • 年代ごとのデータを集計
  • 年代を文字列として表示

その他

  • getDecade 関数は、オプションでフォーマットオプションを指定することができます。

getDecade 関数は、日付を年代単位で扱う際に非常に便利な機能です。使い方も簡単なので、ぜひ活用してみてください。



date-fns の getDecade 関数:サンプルコード集

import { getDecade } from 'date-fns';

const data = [
  { date: new Date(2020, 1, 1), value: 10 },
  { date: new Date(2021, 2, 2), value: 20 },
  { date: new Date(2022, 3, 3), value: 30 },
  { date: new Date(2023, 4, 4), value: 40 },
];

const filteredData = data.filter(item => getDecade(item.date) === 2020);
console.log(filteredData); // [{ date: Date 2020-02-01T00:00:00.000Z, value: 10 }]

年代ごとのデータを集計

import { getDecade, groupBy } from 'date-fns';

const data = [
  { date: new Date(2020, 1, 1), value: 10 },
  { date: new Date(2021, 2, 2), value: 20 },
  { date: new Date(2022, 3, 3), value: 30 },
  { date: new Date(2023, 4, 4), value: 40 },
];

const groupedData = groupBy(data, (item) => getDecade(item.date));
console.log(groupedData); // { 2020: [{ date: Date 2020-02-01T00:00:00.000Z, value: 10 }], 2021: [{ date: Date 2021-03-01T00:00:00.000Z, value: 20 }], 2022: [{ date: Date 2022-04-01T00:00:00.000Z, value: 30 }], 2023: [{ date: Date 2023-05-01T00:00:00.000Z, value: 40 }] }

年代を文字列として表示

import { getDecade, format } from 'date-fns';

const date = new Date(2024, 3, 12);
const decade = getDecade(date);
const decadeString = format(decade, 'yyyy\'s');
console.log(decadeString); // 2020's

特定の年代の範囲を指定

import { getDecade, startOfDecade, endOfDecade } from 'date-fns';

const startDate = startOfDecade(new Date(2020, 0, 0));
const endDate = endOfDecade(new Date(2029, 11, 31));

const data = [
  { date: new Date(2019, 12, 31), value: 5 },
  { date: new Date(2020, 1, 1), value: 10 },
  { date: new Date(2021, 2, 2), value: 15 },
  { date: new Date(2022, 3, 3), value: 20 },
  { date: new Date(2023, 4, 4), value: 25 },
];

const filteredData = data.filter(item => item.date >= startDate && item.date <= endDate);
console.log(filteredData); // [{ date: Date 2020-01-01T00:00:00.000Z, value: 10 }, { date: Date 2021-02-01T00:00:00.000Z, value: 15 }, { date: Date 2022-03-01T00:00:00.000Z, value: 20 }, { date: Date 20


date-fns 以外で年代を取得する方法

getFullYear() と算術演算

最もシンプルな方法は、Date オブジェクトの getFullYear() メソッドと算術演算を組み合わせる方法です。

const date = new Date(2024, 3, 12);
const decade = Math.floor(date.getFullYear() / 10) * 10;
console.log(decade); // 2020

Moment.js ライブラリ

Moment.js は、日付時刻を扱うためのオープンソースライブラリです。getDecade() 関数を提供しており、簡単に年代を取得できます。

import moment from 'moment';

const date = moment(2024, 3, 12);
const decade = date.getDecade();
console.log(decade); // 2020

Lodash ライブラリの _.floor と _.divide 関数

Lodash は、JavaScript のユーティリティライブラリです。_.floor_.divide 関数を組み合わせて、年代を取得できます。

import _ from 'lodash';

const date = new Date(2024, 3, 12);
const decade = _.floor(_.divide(date.getFullYear(), 10)) * 10;
console.log(decade); // 2020

自作関数

上記の方法に加えて、自作関数を作成する方法もあります。

function getDecade(date) {
  return Math.floor(date.getFullYear() / 10) * 10;
}

const date = new Date(2024, 3, 12);
const decade = getDecade(date);
console.log(decade); // 2020

それぞれの方法のメリットとデメリット

方法メリットデメリット
getFullYear() と算術演算シンプルでわかりやすいライブラリを導入する必要がない
Moment.js ライブラリgetDecade() 関数で簡単に取得できるライブラリを導入する必要がある
Lodash ライブラリの _.floor_.divide 関数シンプルでわかりやすいライブラリを導入する必要がある
自作関数柔軟性が高い開発コストがかかる

上記のように、date-fns 以外にも、JavaScript で年代を取得する方法はいくつかあります。それぞれの方法のメリットとデメリットを理解した上で、状況に応じて最適な方法を選択してください。




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

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



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

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


【フロントエンドエンジニア必見】date-fns hoursToMinutesで時間を分に変換する方法

date-fnsライブラリのConversion Helpersは、日付と時刻の操作を簡潔に行うための関数群を提供します。その中のhoursToMinutes関数は、時間数を分に変換する関数です。使い方引数hours: 変換したい時間数を表す数値


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

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


date-fns vs Moment.js:JavaScriptで日付を扱うためのライブラリ徹底比較

General カテゴリ のトークンは、日付の一般的な部分を表します。以下に、よく使用されるトークンとその意味をまとめました。これらのトークンを組み合わせて、さまざまな書式設定文字列を作成できます。例えば、以下の書式設定文字列は、西暦年(4桁)



isSameISOWeek 関数でサクッと判定!2つの日付が同じ週かどうかを判断する方法

isSameISOWeek 関数は、以下の2つの引数を受け取ります。date1: 比較対象となる最初の日付date2: 比較対象となる2番目の日付これらの引数は、Date オブジェクト、または YYYY-MM-DD 形式の文字列で指定できます。


setMonth 以外の方法 - Date オブジェクトの setMonth メソッドと moment.js ライブラリ

使い方setMonth を使用するには、以下の引数を渡す必要があります。date: 月を変更する Date オブジェクトmonth: 設定する月の番号 (0から11までの範囲)例オプションsetMonth には、以下のオプション引数を渡すことができます。


ISO 週年の最後の瞬間を取得:date-fns "endOfISOWeekYear" ヘルパーとその他の方法

endOfISOWeekYear ヘルパーは、特定の日付の「ISO 週年」の最後の瞬間を返す関数です。ISO 週年は、1月1日から始まる週で構成される年です。使い方説明date-fns ライブラリを import します。endOfISOWeekYear ヘルパーに Date オブジェクトを渡します。


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

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


closestIndexToでできること:日付配列から最も近い日付を簡単に見つけよう

"date-fns" の "Common Helpers" に含まれる closestIndexTo 関数は、日付の配列の中で、指定された日付に最も近い日付のインデックスを取得します。これは、カレンダーアプリやイベント管理システムなど、日付を扱う様々な場面で役立つ機能です。