【问题标题】:Moment.js + Livestamp time ago based on UTC DateTime from ServerMoment.js + Livestamp 时间前基于来自服务器的 UTC DateTime
【发布时间】:2015-03-09 09:54:56
【问题描述】:

我正在尝试显示在我的项目中已提出问题的时间。在我的数据库中,我有一个“列出”的日期时间列。当用户发布问题时,我使用UTC DateTime 插入问题。

在客户端我有Livestamp.jsmoment.js 来显示问题被问到的时间。

代码:

var then = moment(listed).unix(); // convert to unix time

然后:

s += "</td><td><span data-livestamp='" + then + "'></span>";

问题是它没有按预期显示时间之前,更多小时。

从服务器返回的日期字符串示例:

2015-03-09T09:16:41

我需要一种方法让 livestamp 显示 timeago,考虑 UTC 时间基于来自服务器的日期时间并考虑本地 UTC 时间,但我不知道如何实现这一点。

注意:很明显,服务器与客户端(访问者)不在同一位置。

使用:MySQL、.NET/C# 4.5、jQuery/Javascript

【问题讨论】:

  • 您使用的是 ASP.NET Web 窗体还是 mvc?
  • 在下面查看我的答案var localDate = new Date(new Date('UTC DATE').getTime() - (new Date().getTimezoneOffset() * 60000));

标签: javascript c# jquery momentjs livestamp.js


【解决方案1】:

两年前我遇到了类似的问题,我是这样解决的:

var localtime = new Date(new Date(listed).getTime() - 
                (new Date().getTimezoneOffset() * 60000));


 var then = moment(localtime).unix(); 

编辑:试过了

  var localDate = new Date(new Date('2015-03-09T13:56:41').getTime() -
                            (new Date().getTimezoneOffset() * 60000));


var then = moment(localDate).unix(); 
document.getElementById("demo").innerHTML = 
              "Made it : <span data-livestamp='" + then + "'></span>" ;

   //Results: "Made it : 5 minutes ago" as I'm in a +1 timezone

【讨论】:

  • 它显示“25 分钟前”而不是“2 小时前”。
  • 我自己试过了,它可以工作:使用日期字符串!如果您得到错误的时间戳,这可能是因为您的数据库和应用程序服务器之间存在偏移。请检查listed 在数据库和应用程序服务器之间是否保持不变,并在您的浏览器中进行检查。
  • 创建的日期是 +2 小时,就像我的 +2 时区一样。这意味着本地日期设置为 10:00,而我的时间实际上是 8:00。这就是我在结果中看到的“在 2 小时内”(将来)。当我做 moment.utc(listed).toDate(); 时,时间被正确列出;然后是 moment.utc().unix()。虽然我不确定这不是正确的方法。服务器和MySQL服务器都是localhost,所以时间是应该的。
  • 我认为问题在于我存储在服务器中的日期已经是UTC,因此存在差异。
猜你喜欢
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 2018-08-07
  • 2017-04-04
相关资源
最近更新 更多