在网站上将用户当地时间的日期/时间转换为UTC

时间:2011-04-14 17:00:53

标签: date localization time utc

我目前正在将一个不在办公室的系统添加到网站,用户可以在其中标记他们的不在办公室的日期和时间,以便他们可以提供其他用户的信息,以便在他们外出时用作备份。

我遇到的问题是将用户的本地时间转换为UTC。我已经看到通过向用户提供UTC以及让客户端(js)将时间转换为本地时间来解决此问题的其他帖子。但是,我可以访问一个专有系统,我可以根据用户的时区偏好来转换日期服务器端。

我的问题是:我是否应该使用服务器端转换,这将允许提供用户的 home 本地时间(例如,他们的美国时间,无论他们在何处登录),或者我应该使用客户端转换?

有没有人有这方面的经验?每种方法有哪些不太明显的优点/缺点?

2 个答案:

答案 0 :(得分:11)

以UTC格式存储所有内容是一个非常好的主意,我建议您坚持下去。

您可以使用的方法很少。我假设您将拥有用户的个人资料。您可以决定让用户选择他们喜欢的时区,并使用此信息显示所有内容。除了适当地处理所有用户输入(在服务器端转换,假设时区是首选的)。

处理它的另一种方法是实际通过Date.getTimeZoneOffset()获取用户的时区偏移量,并以某种方式将其发送到您的服务器(即通过隐藏的表单字段或Ajax)。当你知道这一点时,在用户的时间显示所有内容将是小菜一碟。在这种情况下,您可能希望在客户端上转换日期/时间并将其作为UTC发送出去(或使用带有时区偏移的隐藏表单字段)。

在这两种情况下,您都在服务器端处理数据库日期转换。根据我的经验,这是最好的方法。我想指出,除了转换时区之外,你可能应该考虑以正确的格式显示日期/时间(即取决于AcceptLanguage标题值)。

答案 1 :(得分:1)

问题归结为您是否认为用户将在其个人资料中设置正确的时间,以及您是否认为他们将客户端设置为其计算机设置的时区。

如果家乡时间设置是配置文件中的可选设置(大量用户无法正确设置),那么您应该使用客户端时间。

如果您希望许多用户从未设置为其首选时区的计算机访问系统(例如,如果他们从酒店计算机访问它),那么您应该在服务器上进行转换时间。 / p>

如果这些都适用于你,那么如果你这样做就会被诅咒,如果你不这样做,那就该死的。

如果两者都不适用,两种解决方案都会提供相同,令人满意的结果。

无论您选择什么,最好在显示时添加时间戳以清除任何混淆。