@nuxtjs/date-fnsを使って、Nuxt.jsで日付の処理を行ってみます。
サンプルコード
まずはNuxt.jsのプロジェクトに@nuxtjs/date-fnsを追加します。
yarn add --dev @nuxtjs/date-fns
npmの場合は下記です。
npm install @nuxtjs/date-fns
nuxt.config.jsのbuildModulesに@nuxtjs/date-fnsを追加します。
export default {
buildModules: [
'@nuxtjs/date-fns',
]
}
実際に使ってみます。
$dateFnsを使って日付処理(今回はフォーマット)を行います。
{{ $dateFns.format(new Date('2121/12/24'), 'yyyy.MM.dd') }}
{{ $dateFns.format(new Date(2021, 11, 24, 20, 30, 0), 'yyyy.MM.dd HH:mm:ss') }}
{{ $dateFns.format(new Date('2121/12/24'), 'MMM.dd.yyyy(E)') }}
フォーマット形式の種類はいろいろありますので、詳しくは公式ドキュメントをご確認ください。
保存すると、以下のように表示されました。
2121.12.24 2021.12.24 20:30:00 Dec.24.2121(Wed)
次に日本語で日付を表示させてみます。
nuxt.config.jsでの記述を変更して、日本語のインポートを追加します。
export default {
buildModules: [
['@nuxtjs/date-fns', { locales: ['ja'] }]
]
}
これで日本語対応が追加されたので、日本語でのフォーマットを試してみます。
{{ $dateFns.format(new Date('2121/12/24'), 'yyyy.MMMdo(E)', { locale: 'ja' }) }}
結果は以下のように表示されました。
2121.12月24日(水)
デフォルトだとdate-fnsのメソッドが全てインポートされますが、必要なメソッドのみインポートしたい場合もnuxt.config.jsから設定できます。
例えば現在使用しているformatのみインポートしたい場合、以下のようになります。
export default {
buildModules: [
['@nuxtjs/date-fns', { locales: ['ja'], methods: ['format'] }]
]
}
オプション
date-fns自体のオプションをいくつか分類して試してみます。
設定
まずは年や月などの設定です。
{{ new Date(2021, 11, 24, 20, 30, 0) }}
{{ $dateFns.setYear(new Date(2021, 11, 24, 20, 30, 0), 2022) }}
{{ $dateFns.setMonth(new Date(2021, 11, 24, 20, 30, 0), 1) }}
{{ $dateFns.setDate(new Date(2021, 11, 24, 20, 30, 0), 1) }}
{{ $dateFns.set(new Date(2021, 11, 24, 20, 30, 0), {
year: 2011,
month: 11,
date: 11,
hours: 11,
}) }}
結果は以下のように表示されました。
Fri Dec 24 2021 20:30:00 GMT+0900 (日本標準時) Sat Dec 24 2022 20:30:00 GMT+0900 (日本標準時) Wed Feb 24 2021 20:30:00 GMT+0900 (日本標準時) Wed Dec 01 2021 20:30:00 GMT+0900 (日本標準時) Sun Dec 11 2011 11:30:00 GMT+0900 (日本標準時)
| setYear(date, amount) | 指定した年を設定。 |
|---|---|
| setMonth(date, amount) | 指定した月を設定。 |
| setDate(date, amount) | 指定した日を設定。 |
| setHours(date, amount) | 指定した時間を設定。 |
| setMinutes(date, amount) | 指定した分を設定。 |
| setSeconds(date, amount) | 指定した秒を設定。 |
| set(date, duration) | 日付の各値をまとめて設定。 |
取得
次に日付から年や月などを取得方法です。
{{ $dateFns.getYear(new Date(2021, 11, 24, 20, 30, 0)) }}
{{ $dateFns.getMonth(new Date(2021, 11, 24, 20, 30, 0)) }}
{{ $dateFns.getDate(new Date(2021, 11, 24, 20, 30, 0)) }}
結果は以下のように表示されました。
2021 11 24
| getYear(date, amount) | 指定した日付の年を取得。 |
|---|---|
| getMonth(date, amount) | 指定した日付の月を取得。 |
| getDate(date, amount) | 指定した日付の日を取得。 |
| getHours(date, amount) | 指定した日付の時間を取得。 |
| getMinutes(date, amount) | 指定した日付の分を取得。 |
| getSeconds(date, amount) | 指定した日付の秒を取得。 |
加算
addYears()やaddMonths()、addDays()などで年・月・日などの値に加算ができます。
add()でまとめて加算もできます。
{{ $dateFns.addYears(new Date(2021, 11, 24, 20, 30, 0), 1) }}
{{ $dateFns.addMonths(new Date(2021, 11, 24, 20, 30, 0), 1) }}
{{ $dateFns.addDays(new Date(2021, 11, 24, 20, 30, 0), 7) }}
{{ $dateFns.add(new Date(2021, 11, 24, 20, 30, 0), {
years: 2,
months: 9,
weeks: 1,
days: 7,
hours: 5,
minutes: 9,
seconds: 30,
}) }}
以下のような結果になります。
Sat Dec 24 2022 20:30:00 GMT+0900 (日本標準時) Mon Jan 24 2022 20:30:00 GMT+0900 (日本標準時) Fri Dec 31 2021 20:30:00 GMT+0900 (日本標準時) Wed Oct 09 2024 01:39:30 GMT+0900 (日本標準時)
| addYears(date, amount) | 指定した年数を加算。 |
|---|---|
| addMonths(date, amount) | 指定した月数を加算。 |
| addDays(date, amount) | 指定した日数を加算。 |
| addWeeks(date, amount) | 指定した週数を加算。 |
| addHours(date, amount) | 指定した時間を加算。 |
| addMinutes(date, amount) | 指定した分数を加算。 |
| addSeconds(date, amount) | 指定した秒数を加算。 |
| add(date, duration) | 日付の各値をまとめて加算。 |
減算
subYears()やsubMonths()、subDays()などで年・月・日などの値に減算ができます。
sub()でまとめて減算もできます。
{{ $dateFns.subYears(new Date(2021, 11, 24, 20, 30, 0), 1) }}
{{ $dateFns.subMonths(new Date(2021, 11, 24, 20, 30, 0), 1) }}
{{ $dateFns.subDays(new Date(2021, 11, 24, 20, 30, 0), 1) }}
{{ $dateFns.sub(new Date(2021, 11, 24, 20, 30, 0), {
years: 1,
months: 2,
weeks: 2,
days: 4,
hours: 5,
minutes: 9,
seconds: 30,
}) }}</div>
以下のような結果になります。
Thu Dec 24 2020 20:30:00 GMT+0900 (日本標準時) Wed Nov 24 2021 20:30:00 GMT+0900 (日本標準時) Thu Dec 23 2021 20:30:00 GMT+0900 (日本標準時) Tue Oct 06 2020 15:20:30 GMT+0900 (日本標準時)
| subYears(date, amount) | 指定した年数を減算。 |
|---|---|
| subMonths(date, amount) | 指定した月数を減算。 |
| subDays(date, amount) | 指定した日数を減算。 |
| subWeeks(date, amount) | 指定した週数を減算。 |
| subHours(date, amount) | 指定した時間を減算。 |
| subMinutes(date, amount) | 指定した分数を減算。 |
| subSeconds(date, amount) | 指定した秒数を減算。 |
| sub(date, duration) | 日付の各値をまとめて減算。 |
比較
2つの日付を比較して、その差や判別を行います。
動作テストを行なったのは記事投稿日(2021年11月20日)になります。
{{ $dateFns.formatDistance(
new Date(2021, 11, 24, 20, 0, 0),
new Date(2021, 11, 1, 0, 0, 0),
{ addSuffix: true, locale: 'ja' }
) }}
{{ $dateFns.formatDistanceStrict(
new Date(2021, 11, 24),
new Date(2021, 11, 1),
{ locale: 'ja' }
) }}
{{ $dateFns.formatDistanceToNow(
new Date(2021, 11, 24),
{ addSuffix: true, locale: 'ja' }
) }}
{{ $dateFns.formatDistanceToNowStrict(
new Date(2021, 11, 24),
{ locale: 'ja' }
) }}
{{ $dateFns.compareAsc(
new Date(2021, 11, 24),
new Date(2021, 11, 1)
) }}
{{ $dateFns.compareDesc(
new Date(2021, 11, 24),
new Date(2021, 11, 1)
) }}
以下のような結果になります。
24日後 23日 約1か月後 1か月 1 -1
| formatDistance(date, baseDate, [options]) | 第二引数の日付を基準にして、第一引数の日付までの差を単語で返す。 |
|---|---|
| formatDistanceStrict(date, baseDate, [options]) | 第二引数の日付を基準にして、第一引数の日付までの厳密な差を単語で返す。 |
| formatDistanceToNow(date, [options]) | 現在から指定した日付までの差を単語で返す。 |
| formatDistanceToNowStrict(date, [options]) | 現在から指定した日付までの厳密な差を単語で返す。 |
| compareAsc(dateLeft, dateRight) | 指定した日付を比較して、第一引数より第二引数の方が未来の場合は1、第一引数より第二引数の方が過去の場合は-1、等しい場合は0を返す。 |
| compareDesc(dateLeft, dateRight) | 指定した日付を比較して、第一引数より第二引数の方が未来の場合は-1、第一引数より第二引数の方が過去の場合は1、等しい場合は0を返す。 |
判別
指定した値が条件に対してtrueかfalseかを返します。
{{ $dateFns.isAfter(
new Date(2021, 11, 24),
new Date(2021, 11, 1)
) }}
{{ $dateFns.isBefore(
new Date(2021, 11, 24),
new Date(2021, 11, 1)
) }}
{{ $dateFns.isDate(new Date(2021, 11, 24)) }}
{{ $dateFns.isEqual(
new Date(2021, 11, 24),
new Date(2021, 11, 1)
) }}
{{ $dateFns.isExists(2018, 1, 31) }}
{{ $dateFns.isFuture(new Date(2021, 11, 24)) }}
{{ $dateFns.isPast(new Date(2021, 11, 24)) }}
以下のような結果になります。
true false true false false true false
| isAfter(date, dateToCompare) | 第一引数の日付が第二引数の日付より未来かどうかを返す。 等しい場合はfalse。 |
|---|---|
| isBefore(date, dateToCompare) | 第一引数の日付が第二引数の日付より過去かどうかを返す。 等しい場合はfalse。 |
| isDate(value) | 指定した値がDateインスタンスかどうかを返す。 |
| isEqual(dateLeft, dateRight) | 指定した日付が等しいかどうかを返す。 |
| isExists(year, month, day) | 指定した引数で日付に変換されるかを返す。 |
| isFuture(date) | 指定した日付が現在より未来かどうかを返す。 |
| isPast(date) | 指定した日付が現在より未来かどうかを返す。 |
変換
指定した値を変換します。
{{ $dateFns.hoursToMinutes(1) }}
{{ $dateFns.hoursToMilliseconds(1) }}
{{ $dateFns.minutesToSeconds(60) }}
{{ $dateFns.secondsToMilliseconds(3600) }}
{{ $dateFns.secondsToHours(7200) }}
{{ $dateFns.secondsToHours(7199) }}
以下のような結果になります。
60 3600000 3600 3600000 2 1
| hoursToMinutes(hours) | 指定した時間を分に変換。 |
|---|---|
| hoursToSeconds(hours) | 指定した時間を秒に変換。 |
| hoursToMilliseconds(hours) | 指定した時間をミリ秒に変換。 |
| minutesToHours(minutes) | 指定した分を時間に変換。 |
| minutesToSeconds(minutes) | 指定した分を秒に変換。 |
| minutesToMilliseconds(minutes) | 指定した分をミリ秒に変換。 |
| secondsToHours(seconds) | 指定した秒を時間に変換。 |
| secondsToMinutes(seconds) | 指定した秒を分に変換。 |
| secondsToMilliseconds(seconds) | 指定した秒をミリ秒に変換。 |
| millisecondsToHours(milliseconds) | 指定したミリ秒を時間に変換。 |
| millisecondsToMinutes(milliseconds) | 指定したミリ秒を分に変換。 |
| millisecondsToSeconds(milliseconds) | 指定したミリ秒を秒に変換。 |
コメントが承認されるまで時間がかかります。