幻日幻月環

作成した伺かの更新情報などをつぶやくところ

日数差を取得する

里々のちょっとしたロジックを提供するコーナー。
全て、里々wikiukadocの情報の組み合わせで作ります。
里々のサンプルゴースト「Rポストと狛犬」を書き換えて自ゴーストを作るくらいの知識が必要です。

今回は、「起動時に、前回起動との日数差を取得する」。
アバウトな管理なら、そんなに難しくはないのですが、厳密に日数差を考えると、月をまたぐ場合、閏月をまたぐ場合など、かなり複雑化してしまいます。
年跨ぎなどの場合や、うるう年も対応していて、あるイベントが発生してから3日以内とか、そういう厳密に日数を知りたい場合に活用出来ます。

続きにあるスクリプトは、フェアフィールドの公式を里々で書いたものです。
1年1月1日からのグレゴリオ暦での経過日数が取得できるので、差を取ることで前回起動時との経過日数が分かります。

また、応用として秒まで計算する方法も記述しています。
特定の日時との秒の差まで算出することもできます。
「Rポストと狛犬」の辞書を基準としています。
dic01_base.txt、satori_conf.txtの該当箇所を書き換えてください。
里々を使ったゴーストなら、下記を辞書に書き込めば動きますが、SAORI設定などを行う必要があるかもしれません。

#----
#ここから
#タブ文字などが入っているので、コピー時に消えていないか注意してください。
#----
#satori_conf.txtの「*初期化」に以下の1行足す。
*初期化
$起動日=365*(現在年)+(現在年)/4-(現在年)/100+(現在年)/400+306*(calc,(現在月)+1)/10+(現在日)-428

#dic01_base.txtのOnSatoriLoadに以下の3行足す。
*OnSatoriLoad
$tmp=365*(現在年)+(現在年)/4-(現在年)/100+(現在年)/400+306*(calc,(現在月)+1)/10+(現在日)-428
$日数差=(tmp)-(起動日)
$起動日=(tmp)

#サンプルトーク
#「日数差」に整数が入ってるので、使うなら例えばこんな感じ
*起動
>三日以内 (日数差)<=3
>100日以上ぶり (日数差)>=100
>同じ曜日 (日数差)%7==0
>普通の起動

*三日以内
:ついこの間もあったねー。
*100日以上ぶり
:……誰だっけ?
*同じ曜日
:前回も同じ曜日に来たね。
*普通の起動
:ハロー。

#ランダムトークとかでも。
* (日数差)>=30
:しかし久々だよね。
心配だしたまには顔見せてよ。
#----



・応用

上記「$起動日」に入っているのは、1年1月1日からの日数です。
24倍して(現在時)を足せば時間単位に、さらに60倍して(現在分)を足せば分単位に、さらにさらに60倍して(現在秒)を足せば秒単位で算出できるようになります。
ただ、グレゴリオ暦1年から算出するとかなりの日数となるため、24倍の60倍の60倍すると、里々で扱える最大数を超えてしまいます。
(これは「2038年問題」として現実のコンピュータでも起きています)
秒の単位まで扱うと約58年分しか保存ができません。

解決方法として、現在年から2000を引いておけば、2058年までは問題なく運用できるようになります。
うるう年に関しても400年ことにローテーションするので問題なく算出することができます。

#----
#satori_conf.txtの「*初期化」に以下の2行足す。
*初期化
$仮想年=(現在年)-2000
$起動時刻=(calc,(((365*(仮想年)+(仮想年)/4-(仮想年)/100+(仮想年)/400+306*(calc,(現在月)+1)/10+(現在日)-428)*24+(現在時))*60+(現在分))*60+(現在秒))

#以下を辞書のどこかに書く
*起動時間取得
$仮想年=(現在年)-2000
$tmp=365*(仮想年)+(仮想年)/4-(仮想年)/100+(仮想年)/400+306*(calc,(現在月)+1)/10+(現在日)-428
$tmp=(tmp)*24+(現在時)
$tmp=(tmp)*60+(現在分)
$tmp=(tmp)*60+(現在秒)
$時刻差=(tmp)-(起動時刻)
$起動時刻=(tmp)

#dic01_base.txtの「*起動」を以下のようにする
#その他、ゴースト切り替え時などの起動時ごとの処理も書いていれば(起動時間取得)を追加する
*起動
(起動時間取得):起動しました。
#----


こうして取れるのは秒単位なので、使用時には計算が必要になります。
この「$時刻差」を60で割れば分単位に、3600で割れば時単位に、86400で割れば日単位にできます。
(里々の通常の計算式では、割り算で小数点以下の数字が出ると切り捨てられます)
PageTop

コメント


管理者にだけ表示を許可する