【问题标题】:Save datetime issue with users local datetime使用用户本地日期时间保存日期时间问题
【发布时间】:2011-09-25 08:02:26
【问题描述】:

我在网站中构建了类似聊天服务的东西,当用户发送或接收消息时,我会为他显示消息发送或接收的时间。

我将所有消息都保存在数据库中。

现在问题出在:托管网站的服务器在美国,一些用户来自不同的国家,不同的时区。

所以我的用户发送了一条消息,例如他在埃及,他会看到他的消息是 6 小时前发送的,而不是他刚刚发送的:)

我想知道facebook、twitter和stackoverflow等网站是如何解决这个问题的。

注意事项:
- 注册时我不会询问用户他的时区或国家/地区。
- 我正在使用 ASP.Net MVC。
- 我正在使用 timeago jquery 插件来显示漂亮的格式化日期。

【问题讨论】:

    标签: c# javascript jquery asp.net asp.net-mvc-3


    【解决方案1】:

    如果时间戳存储为Coordinated Universal Time (UTC),那么您所要做的就是根据用户的本地时区格式化数据库中的值。

    例如,假设数据库中的时间戳以毫秒为单位(例如 1309365893296),那么在 javascript 中,您可以执行以下操作将其转换为用户的本地时区:

    var localtime = new Date(1309365893296);
    

    【讨论】:

    • 我会推荐相同的解决方案。
    【解决方案2】:

    我猜最好的方法是在用户提交文本时从他们的 PC 收集 DateTime 值。

    据此,您应该能够根据时差确定他们所在的时区。

    然后,每当您在应用程序中显示时间戳时,添加或减去小时数差异。

    【讨论】:

      【解决方案3】:

      您需要做的是使用DateTime.UtcNow 存储所有时间戳

      当您去向用户显示时间时,您可以使用变量中的.ToLocalTime() 将其转换为每个用户的本地时区。

      【讨论】:

      • .ToLocalTime() 将返回当前服务器的本地时间而不是用户浏览器时间。
      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      相关资源
      最近更新 更多