2016-07-23 26 views
0

我收到一个来自服务器的UTC日期时间,并在尝试以可读的形式来显示它:时刻JS fromnow()输出速记

moment.utc(utc_date).local().fromNow(); 

在我的本地开发环境(宅基地,Laravel)工作的,并将显示完全按照要求,如:

a day ago 

4 hours ago 

但在我的产生式S erver它输出什么似乎像速记:

1d 

4h 

我似乎无法弄清楚了这一点,我的搜索已经产生了什么。有什么明显的我失踪了吗?或者有关如何解决它的任何建议?

+0

我要认为你没有[区域设置](https://开头github上。 com/moment/moment/tree/master/locale),或者您正在测试一个不存在的语言环境,因此它会回落到d/h。 这可能是一个糟糕的假设,因为代码中有一个'defaultRelativeTime',但是TBH中你真的需要在生产中的调试器中单步执行代码。要弄清楚它失败的位置应该不难。 (顺便说一句 - 我开始讨厌es6模块......很多文件都会阻止它 - 这是过分的时刻*) – mash

+0

“utc_date”变量中实际存在什么类型的值?它是一个'Date'对象吗?一个号码?一个字符串?请举个例子。另外,一般来说,'fromNow'不会在意你是否切换到utc模式或本地模式,因为“now”基于utc内部。 –

+0

@MattJohnson恕我直言,这是一个我们不应该关注的细节,因为你已经说过自己。 – mash

回答

1

为了获得您描述的输出类型,您必须自定义区域设置。 Moment没有内置此格式的区域设置。

其他人请求了它,并且有一个示例说明如何在moment issue #2781中执行此操作。也许你使用的一个库正在采用这种方法。

没有什么是机器特定的,会改变你得到的结果,所以如果你在生产服务器上说它不同,那么我会推测在那个环境中有不同的代码,或者它正在运行一个不同的代码路径。

如果你需要显式地清除定制的语言环境,你可以恢复它像这样:

moment.updateLocale('en', null); 
+0

通过npm加载瞬间应该意味着它会自动加载所有语言环境?时刻将区域识别为“en”,经过大量的清新和测试后,似乎能正确显示〜10%的时间,并在其余时间显示为速记。 –

+0

请参见[在NodeJS中加载语言环境](http://momentjs.com/docs/#/i18n/loading-into-nodejs/)。 –

+0

您的链中可能有一些其他库正在全局修改'en'语言环境。 –