javascript 在客户端以用户时区显示日期/时间

njthzxwz  于 2023-03-11  发布在  Java
关注(0)|答案(4)|浏览(153)

我有一个Web应用程序,它在每个页面上显示日期时间戳,例如:
2009年12月12日下午6:00
我想动态地检测用户的时区,并使用JavaScript更改显示。
因此,纽约用户将看到:
2009年12月12日下午6:00
而加州州用户将看到:
2009年12月12日下午3时
有什么建议吗?

k5ifujac

k5ifujac1#

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

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

使用Javascript Date对象,你可以调用date.toDateString来获得一个人类可读的日期。如果你在服务器端需要它,让Javascript用GET或POST把偏移量发送到你的服务器。
格式化日期则是另一回事。Javascript没有提供太多内置功能。你可以自己动手,但那样会有错误和疯狂。日期格式化是任何好的Javascript库都应该提供的功能。例如,JQuery有Datepicker.formatDate

dy2hfwbg

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

nx7onnlm3#

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

uurity8g

uurity8g4#

我知道你很久以前就问过这个问题,但这对我来说似乎是一个普遍的要求,我也遇到了同样的问题。我参考了很多不同的参考文献,从来没有找到一个像我现在使用的那样简单的解决方案。
我的服务器使用MySQL并以UTC格式存储D&T(当然!)。所以从数据库中出来的D&T看起来像YYYY-MM-SS HH:MM:SS,我希望用户能看到他们的本地时间,以他们的本地格式!
我的解决方案是:将MySQL的D&T字符串封装在这两个函数之一中,以用户的本地格式和用户的本地时间获取D&T,或者只获取日期。

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中的字符串,例如

console.log(local_date(user.created_dt));

对我有用。
我试着把所有的东西放在一行中,比如Date("2022-06-25 16:15:01 UTC").toLocaleString(),但是没有用&我在JS方面不够专业(或者不够无聊),不能尝试和找出原因。

相关问题