5

動的な開店時間と閉店時間のバーの時刻表があり、currentTimeが今日の営業時間内にあるかどうかを計算する必要があります。

問題は、開店時間と閉店時間が同じ日になっていないことです。currentTimeが複数日の特定の時間の範囲内にあるかどうかをどのように計算しますか?

このプロジェクトではjqueryを使用しています。

4

5 に答える 5

7

new Date()。getTime();を使用する場合 これにより、特定の時刻からのミリ秒数が返されます(これはたまたま1970年1月1日です)。

開始時刻と終了時刻、および現在時刻の両方でこれを行う場合、現在時刻が開始時刻と終了時刻の間にある場合は、開始ミリ秒より大きく、終了ミリ秒より小さくなります。

ちょっと注意してください、あなたの代わりに、私がウェブを見回して学んだDate().getTime();こととして実際にそれをすることができます。+new Date;Googleが再び勝ちます:)。これは、+が基本的に日付をintにキャストするためです。

于 2012-07-20T11:24:05.233 に答える
3

これは、次のようなjavascriptsDateObjectを使用して計算できます。

var start = new Date(2012,6,20,13).getTime();
var now = new Date().getTime();
var end = new Date(2012,6,21,2).getTime();

if( (start < now ) && (now < end )) {
  console.log("opened");
}
else {
 console.log("closed");
}

明日の午前2時まで開いた状態で出力され、その後は閉じた状態で出力されます。

このJSBinの例を見て、開始時間を変更して、どのように変化するかを確認できます。

于 2012-07-20T11:34:43.160 に答える
1

私は完全に正直に言うと、jqueryについては何も知らないので、一般的なアドバイスしか提供できません。

順序は「固定」ですか?のように:フィールド1では常に営業時間ですが、フィールド2では常に終了時間ですか?

もしそうなら、答えはかなり簡単です...フィールド2がフィールド1よりも小さい場合は、「特殊なケース」を追加します。'timestamp> openTime && timestamp <closeTime'をチェックする代わりに、以下をチェックします。

if(timestamp > openTime && timestamp <= Midnight || timestamp >= 0 && timestamp < closing time) {
     //Open/Close time
}

これは役に立ちますか?

より完全なコードサンプルは次のとおりです。

if((closeTime > openTime && timestamp > openTime && timestamp < closeTime) || //Normal time
(timestamp > openTime && timestamp < 86399) || //Before Midnight
(timestamp > 0 && timestamp < closeTime)) {    //After Midnight
    //Do Stuff
}

「closeTime」は、Jon Taylorがすでに述べたように、常に正しい平日をチェックしていることを確認する必要があります...しかし、完全に正直に言うと、おそらく彼の解決策が最善です。

または、このルールが前日の終了時間に適用される場合は、日中が深夜0時以降であり、この平日の営業時間前であると想定して、確認する必要があります。

これをコードで明確にするために:

if(timestamp < openTime && openTimePrevDay > closeTimePrevDay && timestamp > closeTimePrevDay) {
    //Bar is open
}

私が何を意味するのかわかりますか?

于 2012-07-20T11:29:24.797 に答える
0

閉店時間が開店時間より前の場合、それは1日を超えており、別の方法で決定する必要があります。

if (closingTime >= openingTime) {
    // Open during the day
    return currentTime >= openingTime && currentTime < closingTime;
} else {
    // Open across midnight
    return currentTime >= openingTime || currentTime < closingTime;
}
于 2012-07-20T11:32:51.577 に答える
0

MomentJSライブラリをご覧ください。日付と時刻を処理するための優れたAPIを提供します。

于 2012-07-20T11:33:19.553 に答える