2016-07-23 103 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'語言環境。 –