Javascript 在用户'中显示日期/时间;s时区-在客户端

Javascript 在用户'中显示日期/时间;s时区-在客户端,javascript,datetime,time,timezone,Javascript,Datetime,Time,Timezone,我有一个web应用程序,可以在每页上显示日期戳,例如: 2009年12月12日下午6:00 我想动态检测用户的时区,并使用JavaScript更改显示 因此,纽约用户将看到: 2009年12月12日下午6:00 而加州用户会看到: 2009年12月12日下午3:00 有什么建议吗?您可以用它来获取GMT的本地偏移量 var date = new Date(); var offset = date.getTimezoneOffset(); 从那里它是一个烟雾。使用对象,您可以调用date.toD

我有一个web应用程序,可以在每页上显示日期戳,例如:

2009年12月12日下午6:00

我想动态检测用户的时区,并使用JavaScript更改显示

因此,纽约用户将看到:

2009年12月12日下午6:00

而加州用户会看到:

2009年12月12日下午3:00

有什么建议吗?

您可以用它来获取GMT的本地偏移量

var date = new Date();
var offset = date.getTimezoneOffset();
从那里它是一个烟雾。使用对象,您可以调用
date.toDateString
,以获取人类可读的日期。如果您需要在服务器端使用它,请让Javascript使用GET或POST将偏移量发送到您的服务器


格式化日期是另一回事。Javascript没有提供太多的内置功能。你可以自己动手,但那样虫子和疯狂就存在了。任何好的Javascript库都应该提供日期格式。例如,JQuery有。

下面是如何通过奇妙的“渐进式增强”实现的:

输出您希望它出现的日期,但一定要指定其时区(我在这里使用GMT,但您可以使用UTC等)。然后将其与本地加载时间交换(如果提供了原始时区,则由JavaScript自动处理)

2009年12月12日格林威治标准时间下午6:00
var timestamp=document.getElementById('timestamp'),
t=新日期(timestamp.innerHTML),
小时数=t.getHours(),
min=t.getMinutes()+“”,
pm=假,
月份=[‘一月’、‘二月’、‘三月’、‘四月’、‘五月’、‘六月’、‘七月’、‘八月’、‘九月’、‘十月’、‘十一月’、‘十二月’];
如果(小时数>11){
小时=小时-12;
pm=真;
}
如果(小时=0)小时=12;
如果(最小长度==1)最小值='0'+min;
timestamp.innerHTML=months[t.getMonth()]+'+t.getDate()+','+t.getFullYear()+'+hours+':'+min+''+(pm?'pm':'am');
我们使用的是library,它具有与日期和时间相关的功能,可以为您提供很多帮助。事实上,在我的Mozilla Firefox上,它根据浏览器时区显示所有日期和时间

<div id="timestamp">December 12, 2009 6:00 pm GMT</div>
<script type="text/javascript">
    var timestamp = document.getElementById('timestamp'),
        t         = new Date(timestamp.innerHTML),
        hours     = t.getHours(), 
        min       = t.getMinutes() + '', 
        pm        = false,
        months    = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

    if(hours > 11){
       hours = hours - 12;
       pm = true;
    }

    if(hours == 0) hours = 12;
    if(min.length == 1) min = '0' + min;

    timestamp.innerHTML = months[t.getMonth()] + ' ' + t.getDate() + ', ' + t.getFullYear() + ' ' + hours + ':' + min + ' ' + (pm ? 'pm' : 'am');
</script>