2016-10-06 55 views
2

我寫了一個JIRA插件,它使用了片刻js來格式化和解析日期。 在一些安裝中,當moment.js具有尾隨句點的短名稱時,我遇到了一個奇怪的行爲。時刻js有時在德語區域有moment.monthsShort()和句號(點)

moment.js從哪裏得到shortNames?我如何實現總是獲得相同的短名稱?

目前,像3/Okt/16這樣的日期解析在我的Ubuntu實例上失敗,但在Mac上有效。 3/Okt./16似乎對兩者都有效。

由於該字段通過Java SimpleDateFormat填充,因此我沒有機會更改傳入格式。

例子來自同一個瀏覽器叫:

JIRA Server hosted on MacOS: 
moment.monthsShort() 
["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"] 

JIRA Server hosted on Ubuntu: 
moment.monthsShort() 
["Jan.", "Febr.", "Mrz.", "Apr.", "Mai", "Jun.", "Jul.", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."] 
+0

我很積極,你有兩個不同版本的時刻加載 - 我們添加了更改。在2.13 IIRC中解析。也就是說,我可以看到你的解析代碼嗎?我想知道你是如何解析的。你是否得到了一個控制檯警告,說建設時間回落到js約會? –

+0

這是正確的,我檢查了版本,失敗的是2.13.0,工作的是2.6.0。在我的情況下,版本來自jira本身,我無法控制哪個將被使用。解析是這樣完成的:moment('3/Okt/16','D/MMM/YY');沒有像你說的控制檯輸出。 –

+0

我認爲unicode約定將成爲規範的主要來源,是什麼短名稱。他們都沒有追蹤期。但可能是我對這個話題不夠深入:http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table –

回答

0

基本上,我認爲最好的辦法是寫一些代碼來檢查,如果此刻是2.13或更高版本,並與舊區域的數據覆蓋,如果它是。下面的代碼應該做的訣竅:

if(moment.version.split('.')[1] > 12) 
{ 
    moment.updateLocale('de',{ 
    monthsShort:'Jan_Febr_Mrz_Apr_Mai_Jun_Jul_Aug_Sept_Okt_Nov_Dez'.split('_') 

    }); 
} 
moment('3/Okt/16','D/MMM/YY').format() //"2016-10-03T00:00:00-07:00" 
+0

謝謝Maggie,這真的很樂意幫助這個想法,不幸的是我們推出了一個國際應用程序,我無法保持所有語言。 –

+0

我想我會用這個日期的長表示把它交給JS。那麼由moment.js所做的表示不會影響我們的產品。 –

相關問題