2016-06-21 3 views
0

У меня есть код, который проверяет, попадает ли пользователь в определенное время (с 9:00 до 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:00 - 17:30 по английскому времени.

Итак, если вы просматриваете сайт/сценарий из Америки по адресу 10:00 (UTC-7), вы будете за пределами проверки времени, потому что это будет 18:00 (UTC + 1) по Великобритании.

Итак, я предполагаю, что я пытаюсь получить часовую зону пользователей, а затем конвертировать ее в Великобританию, а затем запустить сценарий checkTime()?

+3

Связанные: http://stackoverflow.com/questions/1091372/getting -The-клиенты-часовой пояс-в-JavaScript. Трудная часть оттуда будет знать время Великобритании, поскольку мы проводим летнее сбережение в течение года, поэтому разница в GMT может означать, что рассчитанное время вышло на 1 час. Я бы порекомендовал вам восстановить время Великобритании с сервера и проверить там вместо того, чтобы подделывать клиентское решение. Особенно, если вы полагаетесь на часы клиента, которые установлены правильно. –

+0

@RoryMcCrossan: '+ new Date()' не зависит от DST и происходит, чтобы вернуть временную метку uk ... – dandavis

+0

OP хочет знать время в Великобритании со дня клиента. Все, что вы можете получить, - это время в GMT (путем вычитания смещения временной зоны), тогда как в течение года Великобритания работает на BST (т.е. GMT + 1) –

ответ

1

Как указано в комментариях, если ваша точка отсчета является конкретным часовым поясом (время Великобритании в данном случае), то вам понадобится логика, чтобы понять природу этого часового пояса - особенно в отношении часовых поясов, которые имеют переход на летнее время или другие изменения их смещения часового пояса.

Местное время в Великобритании варьируется между GMT (UTC + 00: 00) и BST (UTC + 01: 00) и в настоящее время соответствует правилам перехода Европейского союза (в прошлое воскресенье с марта по последнее воскресенье октября, оба в 01:00 UTC).

Вы, безусловно, можете жестко закодировать эти правила в своей собственной логике, но вы, вероятно, найдете код слишком сложным и сложным в обслуживании. Лучшим подходом является использование библиотеки, предназначенной для этой цели. I list several of them here.

Например, используя moment-timezone библиотеку, которая является спутник библиотекой для популярной moment.js библиотеки, вы можете просто сделать это:

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