如何在网页中将UTC时间显示为本地时间?

Ret*_*der 16 asp.net datetime utc

我有一个数据库,其时间为UTC.这个时间可以在网页上显示,因此我被要求在页面中显示为本地时间,因为它可以从任何国家/地区查看.一位同事提到了从当前线程(在服务器上)获取国家/地区设置的一些内容,但我找不到任何有关此问题的详细信息.我想做什么?

Ant*_*ony 20

如果您(和您的网站)对javascript感到满意,那么有一种非常简单的方法可以实现此目的.

首先,在服务器端,您将使用RFC 3339格式(其他协议中使用的互联网时间标准,icalendar)格式化UTC日期/时间.RFC 3339的基本语法是:

YYYY-MM-DDTHH:MM:SS
Run Code Online (Sandbox Code Playgroud)

这样,我在哪里,时间将是:

2010-05-04T05:52:33
Run Code Online (Sandbox Code Playgroud)

但是当时间不是本地时,而是UTC时,你添加一个Z到结尾来表示这一点.所以在我的情况下,因为我距格林威治标准时间-0500小时,所以同样的时间是:

2010-05-04T10:52:33Z
Run Code Online (Sandbox Code Playgroud)

所以,首先让服务器将上述内容输出到您的网页的javascript.然后,javascript可以解析该时间戳,并将输出调整到浏览器时区的日期和时间(由托管浏览器的计算机确定).您应该记住,如果用户来自东京并且正在西班牙查看您的网站,他们将在东京时间看到时间戳,除非他们调整了计算机的时钟.

所以javascript将是:

    var time_string_utc = some_server_variable; // timestamp from server
    var time_string_utc_epoch = Date.parse(time_string_utc);
    var time_utc = new Date();
    time_utc.setTime(time_string_utc_epoch);
Run Code Online (Sandbox Code Playgroud)

此时,您将javascript日期对象设置为UTC时间戳.快速解释上面发生的事情:

第一个变量假定您已将时间戳字符串从服务器传递给该变量.

第二个变量使用该Date.parse()方法将字符串转换为纪元时间戳.

第三个变量创建未设置的Date对象.

最后一行使用setTimemethod,它从一个纪元时间戳设置一个Date对象.

现在您拥有了该对象,您可以根据需要将其输出给用户.作为一个简单的实验,您可以使用:

document.write(time_utc);
Run Code Online (Sandbox Code Playgroud)

如果你在我的时区使用UTC时间戳我开始时:

2010-05-04T10:52:33Z
Run Code Online (Sandbox Code Playgroud)

会给:

 Tue May 04 2010 05:52:33 GMT-0500 (CST)
Run Code Online (Sandbox Code Playgroud)

但是你可以使用各种javascript方法将时间格式化为更令人愉悦的东西.

只要您信任用户的本地浏览器/计算机时区,就无需猜测用户的国家/地区甚至调整时间戳.

再次,简短版本:

    var time_string_utc = some_server_variable; // UTC time from server
    var time_string_utc_epoch = Date.parse(some_server_variable);
    var time_utc = new Date();
    time_utc.setTime(time_string_utc_epoch);
    document.write(time_utc);
Run Code Online (Sandbox Code Playgroud)