我有一个Web应用程序,它在每个页面上显示日期时间戳,例如:2009年12月12日下午6:00我想动态地检测用户的时区,并使用JavaScript更改显示。因此,纽约用户将看到:2009年12月12日下午6:00而加州州用户将看到:2009年12月12日下午3时有什么建议吗?
k5ifujac1#
您可以使用Date.getTimeZoneOffset()来获取与GMT的本地偏移量。
var date = new Date(); var offset = date.getTimezoneOffset();
使用Javascript Date对象,你可以调用date.toDateString来获得一个人类可读的日期。如果你在服务器端需要它,让Javascript用GET或POST把偏移量发送到你的服务器。格式化日期则是另一回事。Javascript没有提供太多内置功能。你可以自己动手,但那样会有错误和疯狂。日期格式化是任何好的Javascript库都应该提供的功能。例如,JQuery有Datepicker.formatDate。
date.toDateString
dy2hfwbg2#
下面是如何用奇妙的“渐进增强”来做到这一点:在您希望显示的位置输出日期,但一定要指定它的时区(我在这里使用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>
nx7onnlm3#
我们使用的是ExtJS库,它有关于日期和时间的功能,可以帮助你很多。事实上,在我的Mozilla Firefox上,它根据浏览器的时区显示所有的日期和时间。
uurity8g4#
我知道你很久以前就问过这个问题,但这对我来说似乎是一个普遍的要求,我也遇到了同样的问题。我参考了很多不同的参考文献,从来没有找到一个像我现在使用的那样简单的解决方案。我的服务器使用MySQL并以UTC格式存储D&T(当然!)。所以从数据库中出来的D&T看起来像YYYY-MM-SS HH:MM:SS,我希望用户能看到他们的本地时间,以他们的本地格式!我的解决方案是:将MySQL的D&T字符串封装在这两个函数之一中,以用户的本地格式和用户的本地时间获取D&T,或者只获取日期。
YYYY-MM-SS HH:MM:SS
function local_dt(date_time) { d = new Date(date_time+" UTC"); return d.toLocaleString(); } function local_date(date_time) { d = new Date(date_time+" UTC"); return d.toLocaleDateString(); }
其中date_time参数是MySQL中的字符串,例如
date_time
console.log(local_date(user.created_dt));
对我有用。我试着把所有的东西放在一行中,比如Date("2022-06-25 16:15:01 UTC").toLocaleString(),但是没有用&我在JS方面不够专业(或者不够无聊),不能尝试和找出原因。
Date("2022-06-25 16:15:01 UTC").toLocaleString()
4条答案
按热度按时间k5ifujac1#
您可以使用Date.getTimeZoneOffset()来获取与GMT的本地偏移量。
使用Javascript Date对象,你可以调用
date.toDateString
来获得一个人类可读的日期。如果你在服务器端需要它,让Javascript用GET或POST把偏移量发送到你的服务器。格式化日期则是另一回事。Javascript没有提供太多内置功能。你可以自己动手,但那样会有错误和疯狂。日期格式化是任何好的Javascript库都应该提供的功能。例如,JQuery有Datepicker.formatDate。
dy2hfwbg2#
下面是如何用奇妙的“渐进增强”来做到这一点:
在您希望显示的位置输出日期,但一定要指定它的时区(我在这里使用GMT,但您可以使用UTC等),然后在加载时将其替换为本地时间(如果提供了原始时区,则由JavaScript自动处理)。
nx7onnlm3#
我们使用的是ExtJS库,它有关于日期和时间的功能,可以帮助你很多。事实上,在我的Mozilla Firefox上,它根据浏览器的时区显示所有的日期和时间。
uurity8g4#
我知道你很久以前就问过这个问题,但这对我来说似乎是一个普遍的要求,我也遇到了同样的问题。我参考了很多不同的参考文献,从来没有找到一个像我现在使用的那样简单的解决方案。
我的服务器使用MySQL并以UTC格式存储D&T(当然!)。所以从数据库中出来的D&T看起来像
YYYY-MM-SS HH:MM:SS
,我希望用户能看到他们的本地时间,以他们的本地格式!我的解决方案是:将MySQL的D&T字符串封装在这两个函数之一中,以用户的本地格式和用户的本地时间获取D&T,或者只获取日期。
其中
date_time
参数是MySQL中的字符串,例如对我有用。
我试着把所有的东西放在一行中,比如
Date("2022-06-25 16:15:01 UTC").toLocaleString()
,但是没有用&我在JS方面不够专业(或者不够无聊),不能尝试和找出原因。