繁体   English   中英

在用户的时区显示日期/时间 - 在客户端

[英]Displaying date/time in user's timezone - on client side

我有一个Web应用程序,在每个页面上显示日期时间戳,例如:

2009年12月12日下午6点

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

所以纽约用户会看到:

2009年12月12日下午6点

加州用户会看到:

2009年12月12日下午3:00

有什么建议么?

您可以使用Date.getTimeZoneOffset()从GMT获取本地偏移量。

var date = new Date();
var offset = date.getTimezoneOffset();

从那里它是一个SMOP。 使用Javascript Date对象,您可以调用date.toDateString来获取人类可读日期。 如果您需要服务器端,请让Javascript通过GET或POST将偏移量发送到您的服务器。

格式化日期是另一回事。 Javascript并没有提供太多的内置。你可以自己破解它,但那样的错误和疯狂就在于此。 日期格式化是任何好的Javascript库应该提供的东西。 例如,JQuery具有Datepicker.formatDate

这是你如何通过精彩的“渐进增强”来实现的:

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

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

我们正在使用ExtJS库,它具有日期和时间的功能,可以帮助你很多。 事实上,在我的Mozilla Firefox上,它根据浏览器时区显示所有日期和时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM