Как получить часовой пояс на стороне клиента

я хочу сохранить timezone of client (visitor), который будет использовать мой веб-портал. не могли бы вы показать мне, как узнать код timezone for client machine using JAVAScript...

I need the GMT offset hours like `(GMT +5:30)`.

person Vijay    schedule 08.07.2013    source источник


Ответы (3)


Это может быть лучшим подходом для поиска локального времени/смещения клиента.

function pad(number, length){
    var str = "" + number;
    while (str.length < length) {
        str = '0'+str;
    }
    return str;
}
var offset = new Date().getTimezoneOffset();

offset = ((offset<0? '+':'-')+ pad(parseInt(Math.abs(offset/60)), 2)+":"+pad(Math.abs(offset%60), 2));
alert(offset);

Результат будет таким = +05:30

person Mehul Dudhat    schedule 14.03.2014
comment
не могли бы вы упомянуть, как это будет лучше, чем другие подходы? - person rakhi4110; 14.03.2014
comment
когда вы пытаетесь использовать этот код, вы можете получить прямое другое время по Гринвичу, например +05:30 или -7:00, вы можете легко проанализировать часы и минуты из этого вывода и создать один объект календаря, а также минуты и часы в этом объекте и ваше время переведено в местное время. - person Mehul Dudhat; 14.03.2014

var OffSetMinute = new Date().getTimezoneOffset();

OffSetMinute var даст разницу в минутах между UTC и местным временем. Смещение положительное, если местный часовой пояс отстает от UTC, и отрицательное, если оно опережает.

Как сказано в комментарии @Guillaume, вышеуказанный метод устарел, поэтому вы можете использовать следующие

  private static final Calendar cal =   new Calendar();
    private static final int LOCALTIMEZONEOFFSET = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / (60*1000); 

Calendar.ZONE_OFFSET дает вам стандартное смещение (в миллисекундах) от UTC. Это не меняется с переходом на летнее время. (Дневной свет)

Calendar.DST_OFFSET дает вам текущее смещение летнего времени (в мсек) - если есть. Например, летом в стране, где используется летнее время, это поле, скорее всего, будет иметь value +1 hour (1000*60*60 msecs).

так что просто ADD int LOCALTIMEZONEOFFSET значение (если положительное) или substarct значение (если ваше значение отрицательное) в ваш UTC Time и это даст вам время клиентской машины.

person User 1531343    schedule 08.07.2013
comment
Calendar.ZONE_OFFSET дает вам стандартное смещение (в миллисекундах) от UTC. это будет работать сейчас? - person User 1531343; 08.07.2013
comment
Calendar.ZONE_OFFSET - это замена устаревшего метода getTimezoneOffset(), но я не уверен, что вопрос касается Java или Javascript. - person Guillaume; 08.07.2013
comment
@Bhavik Kama, не могли бы вы описать мне, как последние две строки вашего ответа помогают мне восстановить часовой пояс для системы клиента (посетителя). - person Vijay; 08.07.2013
comment
@Guillaume, mozilla не сказать, что getTimezoneOffset устарел. Откуда вы знаете, что он устарел? - person Yevgeniy Afanasyev; 07.06.2018

код, который работает для меня...

<script type="text/javascript" language="javascript" >
    function fnLoad()
    { 
        var objLocalZone = new Date();
        var strLocalZone=''+objLocalZone; 

        var mySplitResult = strLocalZone.split(" ");

        var newLocalZone = mySplitResult[5].slice(0,mySplitResult[5].length-2) +':'+mySplitResult[5].slice(mySplitResult[5].length-2,mySplitResult[5].length);
        document.getElementById("hdnTimeZone").value = newLocalZone;
        //alert('Length : '+newLocalZone);
    }
</script>

скрытый ввод

<input type="hidden" id="hdnTimeZone" name="hdnTimeZone"/>

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

person Vijay    schedule 08.07.2013
comment
Это Javascript, а не Java! Пожалуйста, обновите ярлык, который вы использовали для своего вопроса! - person C.Champagne; 08.07.2013