プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • JavaScript
  • 【JavaScript】時間操作ライブラリ比較(Dateオブジェクト、Moment、Lux…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【JavaScript】時間操作ライブラリ比較(Dateオブジェクト、Moment、Luxon、js-Joda、day.js、date-fns、Temporal)

10.10

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

結論

2023年現在のファーストチョイスとしては「date-fns」が選択肢に上がりそうです。

ただ、今後はTemporalがECMA標準になった場合はこちらを使っていくことが予測されそうです。

Dateオブジェクト

Java1.0のDateを参考にして作られた。本家のJavaでは1.1でほとんど非推奨になったがJavaScriptではいまだにJavaで非推奨のメソッドが使われている。

特徴

  • 0indexが使われる。(+1が必要)
  • タイムゾーンがない。

フォーマット

月は1月を0として扱うので+1する必要もある。

1
2
3
4
5
const d = new Date();
console.log(
  'date-format',
  `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`
);

moment

特徴

  • 数年前まではDateオブジェクトが使いづらいのでこれを使うのが一般的でした。
  • 翻訳ファイルを含むのでビルドサイズが大きすぎることがFE界隈では有名な話
  • 2023年現在は新規開発は停止していてメンテナンスモードに入ったので別ライブラリを使うことが推奨されている。

通常のDateオブジェクトに比べてできること

addなどの日付計算

日付のフォーマットが便利

Dateに比べてフォーマットが楽

1
2
const moment = require('moment');
console.log('moment-format', moment().format('YYYY-MM-DD'));

day.js

特徴

  • momentと同じAPIを使用しているのに、momentに比べてビルドサイズが小さいのでmomentからday.jsに移行する現場が増えている。
  • momentを使い慣れているのであればこれを使うべき。
  • オブジェクト指向で実装されています。
  • ほぼJavaScriptで実装されています。(TypeScriptが使われていない)

デメリット

  • 四則演算処理を書いた場合のビルドサイズが大きい。(なので、今後TemporalがECMA標準になった場合はTemporalに移行した方が良いらしい)

js-Joda

Javaを使い慣れていると利点があるライブラリなので、基本的にはこれは選択肢には入らないのかなと思われます。

特徴

  • Java系ライブラリ(java.time、Joda-Time、またはNoda Time)を使い慣れている人はこれを使うべき。

Luxon

特徴

  • 独自のDateTimeオブジェクトを取り回す形になっており、その恩恵でタイムゾーンの操作がかなり直感的
  • 使い勝手はイマイチかなと思います。

date-fns

特徴

  • day.jsとよく比較されます。
  • momentに慣れていないのであればこれも選択肢に上がります。
  • 関数型で実装されています。
  • ほぼTypeScriptで実装されています。

Temporal

ECMAScriptを策定しているTC39が新しく仕様を提案している。momentやdate-fnsに比べて比較的新しめのJavaScript日付ライブラリになります。他のライブラリと異なりJavaScriptのAPIそのもの(Dateオブジェクト)を見直すべきだという発想の元で開発されています。

公式ドキュメント

https://tc39.es/proposal-temporal/docs/ja/index.html

特徴

  • 正確
  • タイムゾーンや別のカレンダーも扱える。
  • 使いやすい
  • 将来的にECMA標準になる予定
  • イミュータブルなので後から時刻の変更ができない。

デメリット

  • まだ、ECMA標準ではないのでもし使うとしてもpolyfillが必要になる。

フォーマット

あまり強くないらしいので、引き続き他のライブラリ(moment、day.jsなど)を使用するのが選択肢に入るらしい。

スポンサーリンク
  • 2021 10.10
  • miyabisan2
  • コメントを書く
  • JavaScript
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2022 04.04

    【Three.js】基本

  2. 2023 09.28

    StoryBookの基本

  3. 2018 06.17

    【JavaScript】「関数」の特徴(「高階関数」も含めて)

  4. 2020 05.09

    【JavaScript】配列の便利メソッド「forEach」について

  5. 2018 04.12

    【JavaScript】「コールバック関数」や、「コールバック地獄」について

  6. 2021 01.24

    【JavaScript】「ESLint」、プラグイン、configの種類など

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【データベース】テーブル設計:アンチパターン「EAV」

【プログラミング】「日時」に関する知識

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー