Moment.js本地相对时间

Moment.js local relative time

我的数据库中的日期设置为 Europe/London 时间。我正在使用 Moment.js 来显示相对时间,例如“3 分钟前”。这对我来说很好,因为我在同一个时区,但是例如,PST 时区的人会看到 "in 8 hours"。我该如何解决这个问题?

我现在的代码是这样的:

$('time').text( moment( '2016-01-22 18:00:00' ).fromNow() );

我认为最好的方法是将日期存储为UTC,然后将其转换为本地时区进行显示。请注意,这不一定与伦敦时间相同,因为 UTC 取消了夏令时的废话。如果存储在数据库中的时间戳不必处理变幻莫测的时区和夏令时,您可以使用日期 class 做任何您需要的事情。日期 class 在内部维护自己的纪元,作为自 1970 年 1 月 1 日午夜 UTC 以来经过的毫秒数。您可以按如下方式评估两个 Date 对象之间的差异:

var agora = Date.now();
var stored = ... // the date that was stored in your database
var diff_msec = agora.getTime() - stored.getTime();

知道差异及其单位是毫秒,您可以将差异转换为最适合表示的任何单位。

为了回应 Jon 的回答,moment 的相对时间功能严格基于 UTC,因此您描述的行为实际上不会发生,除非您在本地时间解释原始时间戳。

很难说你是否这样做了,因为你没有给出输入字符串的样本值。

如果您的时间确实是基于 UTC,但输入字符串中未反映出来,则使用 moment.utc 而不是 moment.

不,伦敦与 UTC 不同。