JavaScriptの日時処理は、正直なところ素晴らしいとはとても言えません。そのため有志による日時処理のライブラリ群は非常に充実しています。
しかしそのうちのどれかが気にいるとは限りません。個人個人によって好みがあるので、どのライブラリを使っても全くピンとこないということもあります。
そこで、私も自分用の新しいライブラリを作ってみました。一人だけで使うのは勿体無いので、公開することにしました。
femtofiber
femtofiberはJavaScriptで日時を扱うための、シンプルなライブラリです。また、ブラウザとNode.jsの両方に対応しているので、お好きな場面で使うことができます。
以下のURLからダウンロードできます。
まだ作ったばかりなので機能は少ないですが、最低限のものは備えています。
インストール(Node.jsなし、ブラウザ向け)
Node.jsではなくクライアント側で使用する場合のインストール方法です。
まずGitHubのリリースページからzipファイルをダウンロードして展開します。
https://github.com/kotofurumiya/femtofiber/releases
そうしたらbuildディレクトリの中に「femtofiber.min.js」というファイルがあるので好きなところに置きます。他のファイルはNode.js向けなので捨ててしまって構いません。
あとはscriptタグで「femtofiber.min.js」を読み込み、スクリプトを自由に書くだけです。
<script src="femtofiber.min.js"></script>
<script>
// ここにあなたのコードを書いてください!
</script>
インストール(Node.js、サーバ向け)
Node.jsを使う場合はnpm installするだけです。
npm install femtofiber --save
あとはfemtofiberを使用するファイル内でimportします。
import { Femto, Duration } from 'femtofiber';
基本的な使い方
Femtoの作成
femtofiberの中核をなすのはFemtoオブジェクトです。Femtoオブジェクトは様々な方法で作成することができます。
const femto1 = new Femto(2018, 6, 22); // 日付から
const femto2 = new Femto(2018, 6, 22, 21, 54, 31, 500); // 日時から
const femto3 = Femto.fromDate(new Date()); // Dateから
const femto4 = Femto.now(); // 今の時刻から
const femto5 = Femto.fromEpochTime(1529590253022); // UNIXタイムから
Femtoオブジェクトはイミュータブルです。つまり一度作成したFemtoの値は変更することができません。
プロパティ
作成したFemtoオブジェクトからは、情報を取り出すことができます。
const femto = Femto.now();
console.log(femto.year);
console.log(femto.month); // 1月が1で、12月が12
console.log(femto.day);
console.log(femto.hour);
console.log(femto.minute);
console.log(femto.second);
console.log(femto.millisecond);
JavaScriptのDateとは違い、月は1から12の値になります。
文字列化
Femtoオブジェクトは文字列にすることができます。
toISOStringメソッドを使うことにより、ISO文字列にすることが可能です。
const iso = Femto.now().toISOString(); // "2018-06-22T23:58:12.457Z"
より柔軟に文字列化したい場合は、以下のようにします。
const femto = Femto.now();
console.log(femto.toFormatString('YYYY/MM/DD')); // "2018/06/22"
console.log(femto.toFormatString('HH:mm:ss:SSS')); // "18:23:27:758"
ここで「YYYY」や「MM」といった文字は、トークンと呼ばれます。トークンは自動的に数値で置き換えられます。トークンの配置を工夫することで、様々な文字列を作り出すことができます。
計算
femtofiberでは日時の加算・減算もできます。計算にはDurationオブジェクトを使用します。
const tomorrow = Femto.now().add(new Duration({days: 1}));
const yesterday = Femto.now().sub(new Duration({days: 1}));
このときFemtoはイミュータブルなため値は変更されないので、新しくFemtoを返します。
Durationオブジェクトは引数を工夫することで様々な期間を作成することができます。
const duration = new Duration({
days: 4,
hours: 7,
minutes: 13,
seconds: 6,
milliseconds: 219
});
比較
時刻の比較もできます。「この時間より前か」「この時間より後か」などを計算することができます。
const current = 1529665309363;
const femto1 = Femto.fromEpochTime(current);
const femto2 = Femto.fromEpochTime(current);
// 値はbooleanで帰ってきます。
femto1.isSame(femto2);
femto1.isBefore(femto2);
femto1.isAfter(femto2);
femto1.isSameOrBefore(femto2);
femto1.isSameOrAfter(femto2);
Femto.now().isBetween(femto1, femto2);
Femto.now().isBetween(femto1, femto2, {
includesFrom: true,
includesTo: true
});
isBefore、isAfterは、値が同じ時falseを返します。同じ値でもtrueにしたい場合は、isSameOrBeforeおよびisSameOrAfterを使用してください。
これはisBetweenでも同様に、Femtoが両端の値と同じだった場合はfalseを返します。isBetweenの場合は、第三引数にオプションを渡すことによって挙動を変更できます。
変換
Femtoオブジェクトは、Dateオブジェクトやエポック秒に変換することができます。
const date = Femto.now().toDate();
const epoch = Femto.now().toEpochTime();
APIドキュメント
より詳しい情報が欲しい時は、APIドキュメントをご覧ください。
https://kotofurumiya.github.io/femtofiber/
ライセンス
ライセンスはMIT Licenseです。ご自由にお使いください。