LoginSignup
36
37

More than 5 years have passed since last update.

[javascript] Moment.jsで日付フォーマットなど 日付系処理を楽にする

Last updated at Posted at 2017-12-16

背景

GitHubにおいて、現在(2017/12)日付を処理するライブラリの中で
多分 一番Starがついてる日付系のライブラリ

概要

Moment.jsはJavaScriptの Dateオブジェクトをラップするオブジェクトを生成して、
そのオブジェクトに日付処理を任せることが出来る。
使い方はDateオブジェクトの代わりにmoment()を呼び出してMomentオブジェクトを生成するだけ。

インストール

npm install moment   # npm

使い方

(1) 現在時刻を文字列で取得

moment().format();                                // "2014-09-08T08:02:17-05:00" (ISO 8601)
moment().format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
moment().format("ddd, hA");                       // "Sun, 3PM"
moment('gibberish').format('YYYY MM DD');         // "Invalid date"

その他の format 設定はこちらまで。

(2) 文字列からmomentを生成する

moment('2017-12-12');

(3) Dateオブジェクトからmomentを生成する

moment(new Date('2017-12-12'));

(4) オブジェクトからmomentを生成する

moment({years: 2017, months: 12, days: 12, hours: 7, minutes: 7, seconds: 7})

(5) 配列(ARRAY) からmomentを生成する

moment([2014, 7, 8])           // Array

(6) UNIX時間からmomentを生成する

moment(1404817278000)          // UNIX時間 (ミリ秒)
moment.unix(1404817278)        // UNIX時間 (秒)

(7) momentをDateオブジェクトに変換する

var now = moment();
console.log(now.toDate()); // Dateオブジェクトが返される

(8) unix timestampで取得

moment().unix() 

(9) ISO8601 フォーマットの文字列で取得

moment().toISOString() // `2014-07-17T10:00:00.964Z` ISO8601 フォーマットの文字列で取得

(10) UTC

moment("2014-03-01 12:00:00").utc().format();
moment.utc("2014-03-01 12:00:00").format();

(11) 日付を比較

moment('2010-10-20').isBefore('2010-10-21'); // true
moment('2010-10-20').isBefore('2010-12-31', 'year'); // false
moment('2010-10-20').isSame('2010-10-20'); // true
moment('2010-10-20').isSame('2010-01-01', 'year');  // true
moment('2010-01-01').isSame('2011-01-01', 'month'); // false, different year 2番目のパラメータは比較単位を指定できる(`month`と指定する場合は、 `year`と`month`をチェックする)
moment('2010-01-01').isSame('2010-02-01', 'day');   // false, different month

isBefore 関数とセットで isAfterisSameOrBefore
isSameOrAfterisBetween 関数も用意されている。

(12) 差分を計算する

var fromDate = moment('2014-01-01 0:00');
var toDate   = moment('2015-01-01 12:00');
toDate.diff(fromDate, 'days'); // 365
// 第三引数にtrueを渡すと少数まで計算してくれる
toDate.diff(fromDate, 'days', true); // 365.5

// 第二引数を省略するとmsを返す
toDate.diff(fromDate); // 31579200000

(12) 日付を操作(加算・減算)する

moment("2014-04-01").add('days', 1).format()  // 2014-04-02T00:00:00+09:00  (1日後)
moment("2014-04-01").add('days', -1).format() // 2014-03-31T00:00:00+09:00 (1日前)
// メソッドチェーンで操作可能
moment("2014-04-01").add("M", 1).add("d", 2).format() // 2014-05-03T00:00:00+09:00

公式ドキュメント

参考になったリンク

https://qiita.com/osakanafish/items/5ef636bbcb2c3ef94953
https://qiita.com/taizo/items/3a5505308ca2e303c099

36
37
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
36
37