Backlink | Photo by Alexey Savchenko on Unsplash
moment.jsは日付計算のためのライブラリー。 Obsidianに内蔵されていて、TemplaterやDataviewで使うことができます。 前回、大晦日までの残数表示に使いました。
でも何者なんでしょう?
そもそも単位は?
moment.jsの基本は日付を計算すること。 moment()で日付を数値化するわけです。 この数値の単位は何でしょうか。
```dataviewjs
a = "2023-05-16"
b = "2023-05-15"
c = moment(a) - moment(b)
d = c / (24 * 60 * 60)
dv.span(d)
```
一日分の差を24時間×60分×60秒で割ってみました。
上記スクリプトを埋め込むと「1000」という数字が出てきます。 つまり、ミリ秒(ms)を単位とすることがわかります。
起点はいつ?
じゃあ、単体のmoment()はいつからの経過時間でしょうか。 西暦2000年の正月で計算してみます。
```dataviewjs
a = "2000-01-01"
b = moment(a)
c = b / (365 * 24 * 60 * 60 * 1000)
dv.span(c)
```
約30年となったので1970年が起点ですね。 たぶん1970年から何ミリ秒経ったかが数値になるようです。
```dataviewjs
a = "1970-01-01 09:00"
b = moment(a)
c = b / (24 * 60 * 60 * 1000)
dv.span(c)
```
検算してみると、1970年1月1日9時でちょうど0になります。 これは日本時間に換算されて時差分が入っているな。
現在時間
「今」は引数無しのmoment()です。
```dataviewjs
a = moment().format()
dv.span(a)
```
「2023-05-16T11:08:04+09:00」と表示。 やはり時差の「+09:00」が付いていました。
format("yyyy-MM-DD")だと日付。 format("HH:mm:ss")だと時刻だけ取り出します。
加減演算
じゃあ、足し算や引き算はどうするのでしょう?
```dataviewjs
a = "2023-05-16"
b = moment(a).add(5, "day").format()
dv.paragraph(b)
b = moment(a).subtract(5, "day").format()
dv.paragraph(b)
```
add()やsubstract()を使います。 "day"を"week"や"month"、"year"にもできます。
差分演算
二つの日付を比較し、日数差を出すこともできます。
```dataviewjs
a = "2023-05-16"
b = "2023-05-15"
c = moment(a).diff(b, "day")
dv.span(c)
```
これが前回の残数表示になります。
まとめ
他にもあるけど、まず使いそうなところから。