営業時間によって自動でのれんを出す

登録しているお店が営業中かそうじゃないかで、やってるよ、やってないよ、という、のれんを出しています。
現状T/Fの切り替えをお店の人が行うことで考えていたのですが、流石にめんどくさいだろうなと思い直しました。

営業時間のプロパティを数字にしてスタート、エンドに分けて、今の時間がスタート、エンド内に入っているのなら、やってるよを表示したいのですが、

① 今の時間を数字で取ってこれない
②中締めする店に対応できない

の問題があります。

上記のことはAdaloでできることなのでしょうか?、またやれるとしたらどんなふうに実装したらいいですか?

これはおっしゃっているままの方法で実装できそうですね!Current Time というのが今の時間なので、「現在時刻が開店時刻と閉店時刻の間のときだけ表示」というような条件で普通にできる気がしました!
何か読み取れてない所がありますかね??

開店と閉店の時間と別に、中締めの開始と終了の時間を登録しておいて、営業中の条件を「現在の時刻が開店時刻と閉店時刻の間、かつ、中締め開始時刻と中締め終了時刻の間でないとき」のようにしたら行けるかもしれないですね!

「いいね!」 1

Current timeの中身がどうなってるのかいまいちわかりません。
ただの時刻なのか、時刻のフォーマットがどうなってるのかという部分です。

そのフォーマットによって計算方法などが変わってくるでしょうし、その計算方法の部分で苦戦しそうです。

中締めに関してはkinariさんのやり方でいけそうですね!

「いいね!」 2

CountDownTimerを使ったやり方を考えてみました。CountDownTimerはアプリの画面が開かれていると動作し、CurrentTimeで現在時刻を取得し、設定したカウントダウン秒数があとどれくらい残っているかを計算します。

今回その日の0:00(深夜)からの経過時間を使って時刻を表現したいのでStart of todayを基準としました。(※Current TimeもStart of TodayもUNIX時間を日単位で表現したものです。UNIX時間は1970年1月1日0:00を基準とした経過時間を秒単位で表現したものです。Adaloでは日単位になっているので1日の秒数の86,400秒(=60×60×24H)を掛け算しています)

(アプリ画面)
開店時間と閉店時間のカウントダウンタイマーがあります。もし10:00開店、21:00閉店ならばカウントダウン秒数の設定は以下のようにします。
開店:60×60×10-(Current Time-Start of Today)×86400 単位:秒
閉店:60×60×21-(Current Time-Start of Today)×86400

カウントダウンの数字が減少して0になったタイミングで起動するActionを設定します。今回はText Inputに営業中または準備中というtextを入力します。(10:00になったタイミングで「営業中」、21:00になったところで「準備中」と入力される設定とします。

Text Inputのデフォルトは「準備中」としておき、10:00~21:00の時間帯だけが「営業中」となるようにします)この「営業中」、「準備中」のinputに基づき画像の切り替えをchange visibilityで行います。

1.カウントダウン秒数の設定

2.Text Inputへの「営業中」、「準備中」の入力設定

3.画像の切り替え
・・・営業中、準備中の2種類の画像を用意し、text inputに入力されている内容に応じて画像をchange visibilityで切り替えます。

4.もし中締めがあった場合の対応
カウントダウンタイマーを4つ用意し同じことをします。
(例)
10:00 開店
14:00 閉店(中締め)
18:00 開店
21:00 閉店

「いいね!」 2

おおー カウントダウンタイマーを使うのは盲点でした。

shndさんの返信で思いついたカウントダウンタイマーを使わないやり方で、

開店時間、閉店時間を0:00からの秒数に直して
開店時間<Current time - Start of Today <閉店時間でやってるよを表示しようかなと思っています。

上記のやり方だと、24:00を超えてからユーザーが営業時間を確認したとき上手に表示できるかな〜というところがあります。

UNIX時間のことなど改めて勉強になりました。

カウントダウンタイマーは挙動が安定しないので、なかなか手を出しずらかったのですが、ここまで綺麗に反映できるのなら取り入れてみようかなとも思いました。

解説込みで丁寧に教えていただきありがとうございます。

Adaloで時間を制御するのはなかなか難しいですよね。私がCountDownにこだわっているのはCountDownが気に入っているからではなく、それ以外の方法が思い付かないからなんです。

一番困るのが「現在時刻」が簡単には取得できないことなんです。Current Timeがあるじゃないかと言われそうですが、CurrentTimeはActionがあった時の時刻を取得する関数で時計のように今何時何分という情報を示してくれるわけじゃないんです。(ここでいうActionとは画面を表示するとかボタンを押して何か動作させる等です)

crubushiさんが返答で書いていただいた、以下のようにして時間を範囲で制御したいと誰でも思いますが、なかなか難しいです。

開店時間<Current time - Start of Today <閉店時間でやってるよを表示しようかなと思っています。

営業中の時間帯に突入し、「営業中」の「のれん」を掲げたとします。閉店時間になったとしても(何かActionを起こさない限り)Current Timeは何も変化しませんから「のれん」(状態表示)は切り替わりません。

この辺を加味してすばらしいアプリに仕上げて下さい。出来たら教えて欲しいです。

「いいね!」 2

なるほど〜

何かしらアクションを起こさないとCurrent time が更新されないというのは初めて知りました。

ユーザーがアプリをいじってる時は動いてないんですかね?

やっぱり時計回りは結構苦手なんですね〜

のれんを出したい部分の画面が若干ぎゅうぎゅうなので、上手にカウントダウンタイマーが隠しながら置けるか試してみます。

「いいね!」 1