Jazzと読書の日々

iPadを筆記具として使う方法を模索します

Obsidianでmoment.jsを使ってみる(基礎編)

a close up of a clock with roman numerals|600 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)
```

これが前回の残数表示になります。

まとめ

他にもあるけど、まず使いそうなところから。