我有一个保存UTC时间的数据库。这个时间可以在网页中显示,所以我被要求在页面中显示为当地时间,因为它可以从任何国家查看。一位同事提到了一些关于从当前线程(在服务器上)获取国家设置的事情,但我找不到任何关于这方面的细节。我想做的事情是可能的吗?
发布于 2010-05-04 19:15:12
如果你(和你的网站)对javascript感到满意,有一种非常简单的方法可以做到这一点。
首先,在服务器端,您需要将UTC日期/时间格式化为RFC3339格式(icalendar等协议使用的互联网时间标准)。RFC 3339的基本语法是:
YYYY-MM-DDTHH:MM:SS
所以在我所在的地方,时间会是:
2010-05-04T05:52:33
但是,如果时间不是本地时间,而是世界时,您可以在末尾添加一个Z
来表示这一点。因此,在我的例子中,由于我距离格林尼治标准时间-0500小时,所以上面的时间相同:
2010-05-04T10:52:33Z
因此,首先让服务器将上面的代码输出到web页面的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);
此时,您已经将javascript date对象设置为您的UTC时间戳。对上面发生的事情进行快速解释:
第一个变量假定您已将时间戳字符串从服务器传递给该变量。
第二个变量使用Date.parse()
方法将字符串转换为纪元时间戳。
第三个变量创建未设置的Date对象。
最后一行使用setTime
方法,该方法根据纪元时间戳设置日期对象。
现在您有了对象,您可以根据自己的需要将其输出给用户。作为一个简单的实验,您可以使用:
document.write(time_utc);
如果你在我的时区,使用UTC时间戳:
2010-05-04T10:52:33Z
会给出:
Tue May 04 2010 05:52:33 GMT-0500 (CST)
但是您可以使用各种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);
发布于 2010-05-04 19:22:15
还可以考虑阅读this thread,它更深入地介绍了如何处理跨时区的夏令时问题
发布于 2010-05-04 18:33:39
当然是有可能的。你只需要找到country settings
来检测你的用户来自哪个国家,然后修改显示的日期以适应那个国家的time.You也可以找到另一种方法来检测用户的国家(可能是从他的ip地址)。
我确信管理这个问题的最好方法是让您的同事知道您需要更多关于项目中国家/地区设置实现的详细信息,以及如何使用它。
https://stackoverflow.com/questions/2764458
复制相似问题