ほぼ1年前の最後のリリース、6か月以上前の最新のコミット、数百の未解決のバグとプルリクエストにより、 Moment.js の速度が低下しているように見え始め、購入する時が来ました。より積極的に維持される代替案。 Day.jsを挿入します。これは、移行を容易にするためにほとんどMoment.jsと互換性のあるAPIを提供する2kBのミニマリストの日付と時刻のライブラリです。

Day.js入門

Node.jsプロジェクトでDay.jsの使用を開始するには、npmまたはyarnのいずれかを使用して依存関係を追加するだけです。

$ npm install dayjs --save
# or
$ yarn add dayjs

次に、それをスクリプトに含めるだけです。

const dayjs = require('dayjs');

Day.jsは最新のブラウザーでも機能し、セルフホストすることも、cdnjsなどのCDNプロバイダーを介して含めることもできます。

日付と時刻の解析

日付と時刻の文字列をDay.jsオブジェクトに解析するのは簡単で、文字列、数値、ネイティブJavaScript Dateオブジェクト、およびその他のDay.jsオブジェクトをサポートします。

let date = dayjs('2019-12-27');
date = dayjs('20191227');
date = dayjs(new Date(2019, 11, 27));
date = dayjs(day('2019-12-27'));

文字列を完全に省略して、Day.jsオブジェクトを現在の日時にデフォルト設定することもできます。

date = dayjs();

日付と時刻の検証

Day.jsで日付と時刻を解析したら、isValid()メソッドを利用して、渡したものが実際にDay.jsで解析できるものであるかどうかを判断できます。

dayjs('2019-12-27').isValid(); // true
dayjs('tomorrow').isValid(); // false

さらに、解析できなかった日付が指定されたDay.jsオブジェクトを表示しようとすると、Invalid Dateが返されます。

日付と時刻の表示

.format()メソッドを使用すると、Day.jsオブジェクトを取得して、人間が読める形式の文字列に変換できます。 通年のYYYY、月と分のMMmmなど、一般的な日付と時刻の変数のセットをサポートします。

日付または時刻の部分に変換したくない追加のテキストを含める場合は、角かっこ[および]を使用して文字列を「ハグ」できます。

dayjs().format('YYYY-MM-DD [at] HH:mm:ss');
dayjs().format('HH:mm:ss [on] YYYY-MM-DD');

日付と時刻の操作

前のセクションで、文字列tomorrowを渡そうとしましたが、これは無効な日付と見なされていました。 明日の日付と時刻を取得できるようにするには、今日の日付と時刻から始めて、それに1日を追加します。

dayjs().add(1, 'day').format('YYYY-MM-DD');

dayの追加に加えて、monthyear、さらにはhourminuteのような時間ベースの間隔を追加することもできます。

dayjs().add(1, 'hour').format('YYYY-MM-DD HH:mm:ss');
dayjs().add(30, 'minute').format('YYYY-MM-DD HH:mm:ss');
dayjs().add(3, 'month').format('YYYY-MM-DD HH:mm:ss');
dayjs().add(3, 'year').format('YYYY-MM-DD HH:mm:ss');

複数の間隔を追加するなどの操作を行うためにチェーンすることもできます。

dayjs().add(1, 'hour').add(30, 'minute').format('YYYY-MM-DD HH:mm:ss');

心配しないでください。減算方法もあります。

dayjs().subtract(4, 'hour').format('YYYY-MM-DD HH:mm:ss');

日付と時刻の比較

開発でかなり定期的に発生するより複雑なタスクの1つは、日付と時刻の比較です。 Day.jsを使用すると、isBefore()isAfter()などのヘルパーメソッドを簡単に提供できます。

const date1 = dayjs('2020-01-1');
const date2 = dayjs();

if (date1.isBefore(date2)) {
  console.log('Date 1 falls before date 2');
}
else if (date1.isAfter(date2)) {
  console.log('Date 2 falls before date 1');
}
else if (date1.isSame(date2)) {
  console.log('Date 1 and date 2 are the same');
}

結論

使い慣れたインターフェースとアクティブなメンテナンス(休暇中であっても)により、Day.jsはMoment.jsの優れた代替手段のように見えます。

あなたの次のプロジェクトでそれを試してみてください、私はそうなることを知っています。