LoginSignup
18
18

More than 5 years have passed since last update.

JavaScriptの日付処理でLuxonを使う

Last updated at Posted at 2018-10-02

今までは Moment.js 使ってたけどモダンに再設計された Luxon を使うことにした。

🤔 なぜ Luxon がつくられたか

Why does Luxon exist? に書いてある。

  • 作者は Moment.js のメンテナー
  • Moment.js を改善するアイデアを持っていたが良いコードベースではなかった
  • より明示的な API にしたかった
    • moment(Number) -> DateTime.fromMillis(Number)
    • moment(Date) -> DateTime.fromJSDate(Date)
  • 追加のデータファイルなしでタイムゾーンを扱いたかった
  • Intl API を使って国際化の仕組みを再考したかった

⏰ Moment.js に劣っていること

  • 最新ブラウザの機能を使うと古いブラウザのための互換性対応をしなければならずコードが煩雑になる
  • 国際化された文字列をコードベースに保持してない故にブラウザが対応するまでその機能を待たなければいけない可能性
  • Intl API のいくつかはブラウザ依存のため Luxon の動作もそれに依存する

特に Intl API は古いブラウザでは動作しないので、そこに対応する必要性の有無が Moment.js を使うか Luxon を使うか否かの分岐点。

Node.js で使うなら問題にならなそうだ。

🛠 インストール


$ yarn add luxon @types/luxon

🗞 TypeScript サンプルコード


import {DateTime} from 'luxon';

// now (string)
DateTime.local().toString();  // => 2018-09-20T14:13:12.954+09:00
DateTime.utc().toString();    // => 2018-09-20T05:13:12.961Z

// now (unixtime)
DateTime.local().toMillis();  // => 1537420392961
Date.now();                   // => 1537420392961

// format
const dt = DateTime.fromISO('2020-07-24T20:00:00');
dt.toUTC().toString();                 // => 2020-07-24T11:00:00.000Z
dt.toString();                         // => 2020-07-24T20:00:00.000+09:00
dt.toISO();                            // => 2020-07-24T20:00:00.000+09:00
dt.toHTTP();                           // => Fri, 24 Jul 2020 11:00:00 GMT
dt.toFormat('yyyy-MM-dd HH:mm:ss z');  // => 2020-07-24 20:00:00 Asia/Tokyo
dt.toSQL();                            // => 2020-07-24 20:00:00.000 +09:00
dt.toSQLDate();                        // => 2020-07-24
dt.toSQLTime();                        // => 20:00:00.000 +09:00
18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18