この記事は Node-RED Advent Calendar 2022 の 5 日目の記事です。
はじめに
Node-REDで日付を扱う方法は色々あると思いますが、JSONataで日付を取得したりするのが簡単だなと感じています。これまでは$fromMillis()
などの関数を使うことが多かったのですが、今回ご紹介する方法は、JSONataの$monent()という関数を使う方法です。
JSONata式の書き方
月初と月末の日時を取得する
サンプルをご紹介します。
例えば、Injectをクリックした当月の初日と月末日を取得したいとします。
2022-12-01T00:00:00
2022-12-31T23:59:59
この場合のJSONata式は$moment().startOf('month')
や$moment().endOf('month')
を使います。.format()
を使うと好きな日付のフォーマットに変更できます。
$moment(payload)
.startOf('month')
.format("YYYY-MM-DDT00:00:00")
$moment(payload)
.endOf('month')
.format("YYYY-MM-DDT23:59:59")
先月の日付
.add()
を使えば日付の加算や減算も簡単です。例えば先月の日付が欲しいときは以下の様にします。
$moment().add(1, 'months')
来年1月の日付が返ってきました。
Tue Jan 03 2023 11:30:10 GMT+0900
昨年の日付
昨年の日付が欲しければ、'years'
とするだけです。
$moment().add(-1, 'years')
Fri Dec 03 2021 11:31:33 GMT+0900
この他の書き方
主な使い方は上記の通りですが、全部の書き方を調べ切れていません。
moment.jsのサイトを参考にしながら、いじってみると面白いと思います。
まとめ
今日は、Node-REDで日付を取得する時にJSONataの$moment関数を使う方法をご紹介しました。
Node-REDの日付の取扱方法については、過去にもいろいろな記事がありました。
昨年のアドベントカレンダーでもこんな記事もありました。
いずれの記事でもJSONataについては
$fromMillis()
$toMillis()
を使っています。
今回は、Node-REDにおける日付問題についての焼き直しの内容になりますが、今回見つけた$moment()による方法を使ってみるとより簡単で書きやすくなるのではと思いましたので、ご紹介致しました。
今回のNode-REDのフローはenebularのDiscoverで公開しております。
ご参考になれば幸いです。