
オフィス狛 技術部のJoeです。
前回、moment.jsを記事にしたのですが、一部機能しか紹介できなかったので、便利だなと思った機能を追加でご紹介します。
日付時刻の比較、差分、タイムゾーンの変換は、前回の記事を参照ください。
node.jsでの日付時刻処理(moment.jsを使ってみる)
※下記の例は、moment.jsのバージョン「2.22.2」で取得した結果になります。
バージョンにより、メソッド名やオブジェクト名などが異なる場合がありますので、ご注意ください。
公式ドキュメント
【フォーマット(format)】
- // フォーマットを指定
- console.log(moment('2019-08-28 01:05:07').format('YYYY年MM月DD日(ddd) HH時mm分ss秒')); // 2019年08月28日(Wed) 01時05分07秒
- // 曜日を日本語表示する場合、事前にロケールを設定します
- moment.locale("ja");
- console.log(moment('2019-08-28 01:05:07').format('YYYY年MM月DD日(ddd) HH時mm分ss秒')); // 2019年08月28日(水) 01時05分07秒
- // フォーマットを指定して、momentオブジェクトが作成可能です
- const date1 = moment("2019年08月28日(水) 01時05分07秒", "YYYY年MM月DD日(ddd) HH時mm分ss秒");
- console.log(moment(date1).format('YYYY/MM/DD(ddd) HH:mm:ss')); // 2019/08/28(水) 01:05:07
- // フォーマットが英語表記の場合は、事前にロケールを変更します
- moment.locale("en");
- const date2 = moment("Fri Aug 28 01:05:07 am 2019", "ddd MMM DD HH:mm:ss a YYYY");
- console.log(moment(date2).format('YYYY/MM/DD(ddd) HH:mm:ss')); // 2019/08/28(Wed) 01:05:07
【加減算(add、subtract)】
- // 加算
- console.log(moment('2019-08-30').add(2, 'days').format('YYYY年MM月DD日(ddd)')); // 2019年09月01日(日)
- // 減算
- console.log(moment('2019-08-01').subtract(2, 'days').format('YYYY年MM月DD日(ddd)')); // 2019年07月30日(火)
- // 加減算する値は、オブジェクトで指定可能です(x年xヶ月x日後など)
- console.log(moment('2019-08-30').add({year :2, month :3, day :5}}).format('YYYY年MM月DD日(ddd)')); // 2021年12月05日(日)
【開始・終了(startOf、endOf)】
- // 年の開始の日
- console.log(moment('2019-09-04').startOf('year').format('YYYY/MM/DD(ddd) HH:mm:ss')); // 2019/01/01(火) 00:00:00
- // 週の最後の日
- console.log(moment('2019-09-04').endOf('week').format('YYYY/MM/DD(ddd) HH:mm:ss')); // 2019/09/07(土) 23:59:59
【月の日数(daysInMonth)】
- // 月の日数
- console.log(moment("2020-02", "YYYY-MM").daysInMonth()) // 29
- // 月末の日を取得しても同じです
- console.log(moment("2020-02", "YYYY-MM").endOf('month').get('date')); // 29
【期間内判定(isBetween)】
- // 期間内の場合、trueを返します(デフォルトでは、指定した開始、終了と一致する場合、falseを返します)
- console.log(moment('2019-10-19').isBetween('2019-10-19', '2019-10-25')); // false
- console.log(moment('2019-10-20').isBetween('2019-10-19', '2019-10-25')); // true
- console.log(moment('2019-10-25').isBetween('2019-10-19', '2019-10-25')); // false
- // 第3パラメータで判定基準(年、月など)を指定できます
- console.log(moment('2019-10-20').isBetween('2019-09-19', '2020-11-25', 'month')); // true
- console.log(moment('2019-10-20').isBetween('2019-09-19', '2020-11-25', 'year')); // false
- // 第4パラメータで、指定した開始、終了を含む「[]」、含まない「()」を指定できます
- console.log(moment('2019-10-19').isBetween('2019-10-19', '2019-11-25', null, '[]')); // true
- console.log(moment('2019-10-19').isBetween('2019-10-19', '2019-11-25', null, '(]')); // false
【うるう年判定(isLeapYear)】
- // うるう年の場合、trueを返します
- console.log(moment("2020", "YYYY").isLeapYear()); // true
- console.log(moment("2019", "YYYY").isLeapYear()); // false
【オブジェクトのコピー(clone)】
- // 値渡しでコピーされます(参照渡しではないです)
- const date1 = moment('2019-08-28 01:05:07');
- const date2 = date1.clone();
- // コピー元を更新
- console.log(date1.year(2020).format('YYYY/MM/DD(ddd) HH:mm:ss')); // 2020/08/28(Fri) 01:05:07
- // コピー先は変更されない
- console.log(date2.format('YYYY/MM/DD(ddd) HH:mm:ss')); // 2019/08/28(Wed) 01:05:07
【ロケールをカスタマイズする】
ロケールを新たに定義して、カスタマイズすることが可能です。
- // ロケール「ja」を継承して新規ロケール「my_ja」を定義
- moment.defineLocale('my_ja', {
- parentLocale: 'ja',
- });
- // 定義を更新
- moment.updateLocale('my_ja', {
- // 月(MMMM:1月、2月・・・)の定義を旧暦の月で更新
- months : ["睦月", "如月", "弥生", "卯月", "皐月", "水無月", "文月", "葉月", "長月", "神無月", "霜月", "師走"],
- // 週の最初を月曜日に更新
- week : { dow: 1 }
- });
- // 「my_ja」にロケールを変更
- moment.locale("my_ja");
- // 9月を旧暦で、周の最初を表示
- console.log(moment('2019-09-04').startOf('week').format('YYYY年 MMMM DD日(ddd)')); // 2019年 長月 02日(月)
- // 2番目の引数としてnullを渡すと、定義したロケールを削除します
- moment.updateLocale('my_ja', null);
日付時刻処理のライブラリは他に「dayjs」、「date-fns」、「luxon」などありますが、
「moment」は一番人気のライブラリなので、ぜひ使ってみてください。
moment.js , Node.js
0 件のコメント:
コメントを投稿