6

我正在开发一个允许用户添加日历条目的网站,然后在主页上所有用户都可以看到这些条目,并带有一些文字说明这些条目是最新的,例如

第 1 场:5 分钟
第 2 场:7 小时
第 3 场:4 天

我遇到的问题是每个人都可能在不同的时区。我已经决定要在 GMT 中存储所有时间/日期。

我正在纠结的是,当用户提交日历条目时,比如说 2009 年 1 月 1 日上午 10:30,我需要计算出这个日期时间在 GMT 中的存储时间。有没有办法知道用户本地时区/时间是什么,以便我可以将其与服务器时间 (GMT) 进行比较以进行转换?

我真的希望这是有道理的。我希望我可以做到这一点,而不必询问用户他们所在的时区,或者强迫用户在 GMT 中输入所有日期时间。

4

3 回答 3

5

在将日期时间发送到服务器之前,将日期时间转换为 GMT 客户端(如果这是一个 Web 应用程序,则在 JavaScript 中)。让服务器只使用 GMT(我会说 UTC)。显示日期/时间也是如此。将 GMT/UTC 发送给客户端,让 JS 本地化。在我看来,这是唯一完全安全的方法,因为您让用户操作系统决定时间应该是多少。

还有其他原因,如果您只需要知道客户现在的时间,您可以从中获取偏移量(可以通过 JS 等检索)。但是,如果您需要不同位置的历史和未来日期/时间的准确日期/时间,您最好让客户处理它。

PS:在我的 TimeZone 实现中,我还使用 UNIX 时间格式进行客户端和服务器之间的通信。这很容易解析,我相信它是 JS 的原生日期时间格式。我现在不能为你展示我的代码,但是用谷歌搜索应该相对容易。

于 2009-02-14T09:48:10.827 回答
1

您唯一的选择(除了明确的用户选择)是从浏览器获取时区偏移量:

var tzOffset = new Date().getTimezoneOffset(); // Minutes

然后您需要使用隐藏字段或其他合适的方法将其发送到服务器。

This will give you only a time zone offset, not a complete time zone information. This isn't very reliable, so I would still leave the choice to the user, but use this information to preselect a suitable time zone.

于 2009-02-14T09:51:01.770 回答
1

Incase anyones interested I found a site that gives a good working example of this in action

http://www.tellingmachine.com/post/2008/05/Rendering-ASPNET-UTC-time-as-local-time-of-the-browsers-time-zone.aspx

于 2009-02-15T08:28:32.573 回答