我有一个表格需要以客户的时区显示日期/时间。但是,我很难找到有效执行此操作的方法。我知道我可以使用客户端 javascript 来获取时区(而且这个方法有点不稳定),但我在 Page_Load 事件中需要它,所以我不能事先调用 javascript。
我可以从单独的页面(例如登录时)获取它,但这并不总是有效,因为有时人们会直接在内部页面中使用书签,并使用 cookie 绕过登录。
所以我有几个选择: 1. 为每个用户设置一个缓存,用于我在每次回传中填充的最后一个时区,但不保证它是正确的)
尝试一些奇怪的 IP 地理定位黑客
拥有一个允许用户设置时区的用户配置文件(同样,如果他们旅行,这也不总是正确的)
尝试一些时髦的页面重定向来强制回发,(但一些浏览器禁用页面重定向)
让用户明确设置 TZ
在 Javascript 中进行 tz 格式化
这些都不是理想的,在我看来,浏览器应该提供服务器的信息。还有其他建议吗?
最佳答案
如果可能,相对显示时间。不要显示特定时间,而是使用诸如“5 分钟前”或“上周”之类的散文。
如果您必须显示客户端时区的绝对时间,根据您的意见,我会选择选项 #5,将 UTC 时间发送到浏览器,然后使用 JavaScript 显示本地时间。根据您的描述,听起来用户无需登录即可访问需要显示其时区时间的页面,因此将其存储在用户配置文件中似乎不够充分。
我在 Advice for Storing and Displaying Dates and Times Across Different Time Zones 中更详细地讨论了相对时间显示概念,以及在 DateTime
结构上提供一个简单的扩展方法,用于添加 ToRelativeDateString
方法,以便您可以编写如下代码:
string relativeTime = myDateTimeVariable.ToRelativeDateString();
希望这有助于...
关于javascript - ASP.NET 中的客户端时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4294021/