0

1 日 2 時間の間に特定のメッセージを表示する JavaScript コードを作成しようとしています。私たちは東部標準時を使用していますが、スクリプトを書くのがはるかに簡単になるので、世界時でも問題なく作業できます。これまでのところ、私はこれを持っており、うまく機能していますが、夏時間の使用に関しては完全に困惑しています。

$(document).ready(function(){
    var todaysDate = new Date();
    var weekday = todaysDate.getDay();
    var universalhour = todaysDate.getUTCHours();

if (weekday >= 0) {
    if (weekday <= 4) {
        if (universalhour >= 14) {
            if (universalhour < 23) {
                $('div#announcements span').append('<br />Open.');
            }
        }
    }
}
if (weekday == 5) {
    if (universalhour >= 14) {
        if (universalhour < 20) {
            $('div#announcements span').append('<br />Open.');
        }
    }
}
});

基本的に、「営業中」というメッセージは、日曜日から木曜日の午前 10 時から午後 8 時まで、および金曜日の午前 10 時から午後 4 時の間にのみ表示されます。

UST での作業に問題はありません。夏時間の回避策を見つける手助けが必要なだけです。これは私の知識の範囲を超えているためです。

4

2 に答える 2

0

ケース1

コンピューターが東部タイム ゾーンで実行するように設定されていて、この変更を使用する場合:

var hour = todaysDate.getHours();

次に、すべてのテストでその変数を使用します。

それはそれの世話をする必要があります。

ケース 2

ネットワーク/インターネット接続の最後にクライアント マシンで実行する JavaScript を作成している場合は、サーバーからクライアントに何かを渡す必要があります。これにより、JavaScript は東部時間帯の時刻を知ることができます。

したがって、Web ページに次の内容を含めることができます。

<script>
   // The global value is filled in by the server based on current time on your server which is
   //  running EST or can calculate it. That code might be PHP or Java or Ruby or ...
   var ESTOffset = 5.0; 
</script>

次に、次のような計算を使用する必要があります。

 var hour = todaysDate.getUTCHours() + ESTOffset;

それについての難しい部分は、メッセージを表示し、それが東部時間に基づいて変化することを期待することです. ユーザーがページをポップアップ表示し、DST が EST で始まるまでそのままにしておくとどうなりますか? それを処理する必要がありますか?東部標準時でほぼ午後 2 時にページがポップアップ表示されたらどうしますか? 数分後にメッセージをポップアップ表示する必要がありますか?

ケース 3

任意のタイム ゾーンを実行しているコンピューターで、DST を含む EST 時間を把握する必要がある場合、問題が発生します。「アメリカのニューヨークは今何時ですか?」と尋ねられる JavaScript はありません。ルールを知っていて、EST でルールが変更された場合に更新する (または確実に更新する) 必要があるライブラリが必要になります。または、DST が EST でいつ開始および終了するかを認識し、計算を行うコードを自分で追加することもできます。もちろん、ルールが変更された場合はコードを更新する必要があります。

于 2013-10-15T18:30:25.573 に答える
0

これは、ライブラリで行うのが最も簡単です。moment.jsmoment-timezoneとともに使用する:

$(document).ready(function(){

    var now = moment().tz("America/New_York");
    var weekday = now.day();
    var hour = now.hour();

    var isOpen = (weekday >= 0 && weekday <= 4 && hour >= 10 && hour < 20) || 
                 (weekday == 5 && hour >= 10 && hour < 16);

    if (isOpen) {
        $('div#announcements span').append('<br />Open.');
    }
});

タイム ゾーン データ ビルダAmerica/New_Yorkからのゾーンのデータを必ず含めてください。これは、米国東部時間の IANA タイム ゾーン識別子です。

ここでの主な利点は、時間を現地時間で表現できることです。これにより、夏時間の変動が自動的に考慮されます。つまり、これらの時間は、「東部標準時」または「東部夏時間」のいずれかである必要はなく、米国の「東部時間」ゾーンにあります。

于 2013-10-15T18:55:27.460 に答える