【发布时间】:2013-09-16 03:17:54
【问题描述】:
我想向用户显示他们执行某项操作后已经过去了多长时间。
动作发生的日期+时间存储在服务器上,在服务器的时区中。这就是造成问题的原因,因为如果用户计算机的时区比服务器的时区早 12 小时,那么如果用户现在添加一些内容,moment.js 将显示“12 小时前”作为fromNow() 的输出而不是@ 987654322@.
为了解决这个问题,我正在尝试以下方法:
var actionTime = moment( action.timeStamp);//time of when user performed action
var serverTime = moment().zone('-07:00'); //current server time
console.debug( serverTime);//outputs Wed Sep 11 2013 15:19:51 GMT-0700
var timeAgo = serverTime.from( actionTime);
尽管如此,timeAgo 仍然显示客户端时区和服务器时区之间的差异(即显示“12 小时前”而不是“现在”);
有人知道如何解决这个问题或我做错了什么吗?
【问题讨论】:
-
您最好先在服务器上转换为 UTC 并与之进行比较。这可能吗?
-
另外,
action.timestamp是什么格式的? -
@MattJohnson 它最初是一个 mysql DATETIME 字符串,但我使用 Moment 对其进行格式化以从中生成一个 Moment 对象。将服务器更改为使用 UTC 是非常有问题的,所以我想尽可能避免这种情况。有没有办法让这项工作像现在一样?
-
是的,您可以立即完成。我现在是移动设备,但稍后我会发布一个示例。你能显示输入的确切字符串吗?这非常重要。另外,您的服务器是否在像亚利桑那州这样的固定时区?或者你现在在太平洋夏令时间?再次,它确实很重要。通常这就是它在服务器代码中完成的原因。
-
我还没收到你的回信就回家了,所以我做了一些假设。如果您有不同的做法,请告诉我,我会做出相应调整。
标签: javascript datetime timezone momentjs