【问题标题】:How to get Client side time zone如何获取客户端时区
【发布时间】:2013-07-05 10:14:49
【问题描述】:

我想存储timezone of client (visitor),它将使用我的门户网站。 你能告诉我找到timezone for client machine using JAVAScript代码的方法吗...

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

【问题讨论】:

标签: javascript


【解决方案1】:

这可能是查找客户端本地时间/偏移量的更好方法

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

【讨论】:

  • 能否请您提一下,这会比其他方法更好吗?
  • 当您尝试使用此代码时,您可以直接获得不同的 gmt 时间,例如 +05:30 或 -7:00,您可以轻松地从中解析小时和分钟,并创建一个日历对象和分钟和该对象中的小时数,并将您的时间转换为当地时间。
【解决方案2】:
var OffSetMinute = new Date().getTimezoneOffset();

OffSetMinute 变量将给出 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 为您提供当前 DST 偏移量(以毫秒为单位) - 如果有的话。例如,在夏季使用 DST 的国家/地区,此字段可能具有 value +1 hour (1000*60*60 msecs)

所以只需将 ADD int LOCALTIMEZONEOFFSET 值(如果为正)或 substarct 值(如果您的值为负)放入您的 UTC Time 中,这将为您提供客户端机器的时间。

【讨论】:

  • Calendar.ZONE_OFFSET 为您提供与 UTC 的标准偏移量(以毫秒为单位)。现在可以了吗?
  • Calendar.ZONE_OFFSET 是已弃用的 getTimezoneOffset() 的替代品,但我不确定问题是针对 Java 还是 Javascript
  • @Bhavik Kama 请您描述一下您的答案的最后两行如何帮助我检索客户(访客)系统的时区。
  • @Guillaume, mozilla 并没有说 getTimezoneOffset 已被弃用。你怎么知道它已被弃用?
【解决方案3】:
function getTimezone() {
    var u = new Date().toString().match(/([-\+][0-9]+)\s/)[1];
    return u.substring(0, 3) + ':' + u.substring(3, u.length);
}

【讨论】:

    【解决方案4】:

    适合我的代码...

    <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"/>
    

    我不知道这是获取客户(访客)时区的正确方法。但这对我来说很好。如果有人有最佳解决方案,请告诉我。谢谢...

    【讨论】:

    • 这是Javascript,而不是Java!请更新您用于问题的标签!
    猜你喜欢
    • 2015-01-29
    • 2012-05-05
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2011-12-06
    • 2012-05-01
    相关资源
    最近更新 更多