使用用户本地日期时间保存日期时间问题
Posted
技术标签:
【中文标题】使用用户本地日期时间保存日期时间问题【英文标题】:Save datetime issue with users local datetime 【发布时间】:2011-09-25 08:02:26 【问题描述】:我在网站中构建了类似聊天服务的东西,当用户发送或接收消息时,我会为他显示消息发送或接收的时间。
我将所有消息都保存在数据库中。
现在问题出在:托管网站的服务器在美国,一些用户来自不同的国家,不同的时区。
所以我的用户发送了一条消息,例如他在埃及,他会看到他的消息是 6 小时前发送的,而不是他刚刚发送的:)
我想知道facebook、twitter和***等网站是如何解决这个问题的。
注意事项: - 注册时我不会询问用户他的时区或国家/地区。 - 我正在使用 ASP.Net MVC。 - 我正在使用 timeago jquery 插件来显示漂亮的格式化日期。
【问题讨论】:
【参考方案1】:如果时间戳存储为Coordinated Universal Time (UTC),那么您所要做的就是根据用户的本地时区格式化数据库中的值。
例如,假设数据库中的时间戳以毫秒为单位(例如 1309365893296),那么在 javascript 中,您可以执行以下操作将其转换为用户的本地时区:
var localtime = new Date(1309365893296);
【讨论】:
我会推荐相同的解决方案。【参考方案2】:我猜最好的方法是在用户提交文本时从他们的 PC 收集 DateTime 值。
据此,您应该能够根据时差确定他们所在的时区。
然后,每当您在应用程序中显示时间戳时,添加或减去小时数差异。
【讨论】:
【参考方案3】:您需要做的是使用DateTime.UtcNow
存储所有时间戳
当您去向用户显示时间时,您可以使用变量中的.ToLocalTime()
将其转换为每个用户的本地时区。
【讨论】:
.ToLocalTime() 将返回当前服务器的本地时间而不是用户浏览器时间。以上是关于使用用户本地日期时间保存日期时间问题的主要内容,如果未能解决你的问题,请参考以下文章