【发布时间】:2010-12-22 16:07:21
【问题描述】:
我有一个在每个页面上显示日期时间戳的 Web 应用程序,例如:
2009 年 12 月 12 日下午 6:00
我想动态检测用户的时区并使用 JavaScript 更改显示。
所以纽约用户会看到:
2009 年 12 月 12 日下午 6:00
虽然加利福尼亚用户会看到:
2009 年 12 月 12 日下午 3:00
有什么建议吗?
【问题讨论】:
标签: javascript datetime time timezone
我有一个在每个页面上显示日期时间戳的 Web 应用程序,例如:
2009 年 12 月 12 日下午 6:00
我想动态检测用户的时区并使用 JavaScript 更改显示。
所以纽约用户会看到:
2009 年 12 月 12 日下午 6:00
虽然加利福尼亚用户会看到:
2009 年 12 月 12 日下午 3:00
有什么建议吗?
【问题讨论】:
标签: javascript datetime time timezone
您可以使用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 上,它会根据浏览器的时区显示所有日期和时间。
【讨论】: