2016-06-21 5 views
0

月曜日から金曜日の特定の時間(午前9時〜17時30分)に該当するかどうかを確認するコードがあります。全員が閲覧できるようにタイムゾーンをGBに設定する

function checkTime() { 
    var d = new Date(); // current time 
    var hours = d.getHours(); 
    var mins = d.getMinutes(); 
    var day = d.getDay(); 

    return day >= 1 
      && day <= 5 
      && hours >= 9 
      && (hours < 17 || hours === 17 && mins <= 30); 
} 

これは正しく動作していますが、ユーザーのブラウザ時間に基づいて時刻を確認します。

私がしたいことは、午前9時から午後17時30分まで英国時間のみをチェックしてください。

米国のサイト/スクリプトを午前10時(UTC-7)に表示している場合は、イギリス時間18:00 pm(UTC + 1)になるためタイムチェッカーの外になります。

私は何をしようとしているのでしょうか?ユーザーのタイムゾーンを取得してからUK時間に変換してから、checkTime()スクリプトを実行しますか?

+3

関連:http://stackoverflow.com/questions/1091372/getting例えば

は、人気のmoment.jsライブラリのコンパニオンライブラリですmoment-timezoneライブラリを使用して、あなたは、単にこれを行うことができます-the-clients-timezone-in-javascriptです。そこからのトリッキーな部分は、年間を通して夏時間を稼働させているので、英国時間を知っているので、GMTとの違いは計算時間が1時間外れることを意味する可能性があります。私はあなたがサーバーから英国の時間を取得し、代わりにクライアント側の解決策を見直すことをお勧めします。特に、クライアントクロックが正しく設定されているかどうかを確認する必要があります。 –

+0

@RoryMcCrossan: '+ new Date()'はDSTの影響を受けず、ukのタイムスタンプを返します。 – dandavis

+0

OPは、クライアントの日付から英国の時刻を知りたいと思っています。あなたが得ることができるのは、タイムゾーンオフセットを減算することによってGMTの時間ですが、英国はBST(すなわちGMT + 1)で稼動しています。 –

答えて

1

コメントで言及されているように、参照ポイントが特定のタイムゾーン(この場合はUK Time)である場合、そのタイムゾーンの性質を理解するロジックが必要です。夏時間の移行、またはタイムゾーンのオフセットに対するその他の変更が含まれます。

英国の現地時間はGMT(UTC + 00:00)とBST(UTC + 01:00)の間で交互に変更され、現在欧州連合移行規則に従います(10月の最終日曜日の最終日曜日、 01:00 UTC)。

あなたは確かにそれらのルールをあなた自身のロジックにハードコードすることができますが、コードは非常に複雑で、維持することは難しいでしょう。より良いアプローチは、この目的のために設計されたライブラリを使用することです。 I list several of them here

function checkTime() { 

    // now in the UK 
    var m = moment.tz("Europe/London"); 

    // use moment.js getters 
    var hours = m.hour(); 
    var mins = m.minute(); 
    var day = m.day(); 

    // your original logic retained 
    return day >= 1 
      && day <= 5 
      && hours >= 9 
      && (hours < 17 || hours === 17 && mins <= 30); 
} 
+0

ありがとうマットは理にかなっています。 :) – BoneStarr

関連する問題