关于本地化:从用户的本地时间到网站上的UTC的日期/时间转换

date / time conversion from user's local time to UTC on website

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

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

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

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


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

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

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

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


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

如果主页时间设置是配置文件中的可选设置(大量用户未正确设置的设置),则应使用客户端时间。

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

如果这些都适用于你,如果你这样做,那就是该死的,如果你不这样做,那该死的话。

如果两者都不适用,那么两种解决方案都能提供相同,令人满

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