2016-08-18 97 views
1

有沒有一種方法可以將自定義格式代碼添加到基於區域設置的長日期時刻?自定義長日期格式js

例如:

moment().format("L")

是將打印長日期的區域(含一年)的現有格式,但如果我想補充我自己的那排除在今年這樣的:

moment().format("LTY")只是在給定的語言環境中打印月份和日期。

我該怎麼做?

回答

2

閱讀關於long date formats的部分。你會使用替換默認的長日期格式對象:

moment.updateLocale('en', { 
        longDateFormat : { 
        LT: "h:mm A", 
        LTS: "h:mm:ss A", 
        L: "MM/DD",   // Remove year 
        LL: "MMMM Do YYYY", 
        LLL: "MMMM Do YYYY LT", 
        LLLL: "dddd, MMMM Do YYYY LT" 
       } 
}); 

然後使用:

var x = moment().format('L'); 

瞬間解析傳遞給格式字符串尋找標記。如果你想添加自定義標記,如「LTY」你還需要將它添加到本地格式標記列表:

var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; 

會改變(LTY補充):

var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTY|LTS|LT|LL?L?L?|l{1,4})/g; 

和更新默認的長日期格式與新的令牌:

var defaultLongDateFormat = { 
    LTY : 'MM/DD HH:mm', // format for new token 
    LTS : 'h:mm:ss A', 
    LT : 'h:mm A', 
    L : 'MM/DD/YYYY', 
    LL : 'MMMM D, YYYY', 
    LLL : 'MMMM D, YYYY h:mm A', 
    LLLL : 'dddd, MMMM D, YYYY h:mm A' 
}; 

那麼,如果你想一些其他的格式:

moment.updateLocale('en', { 
        longDateFormat : { 
        LTY: 'MM/DD HH:mm', // new format for token here 
        LT: "h:mm A", 
        LTS: "h:mm:ss A", 
        L: "MM/DD/YYYY", 
        LL: "MMMM Do YYYY", 
        LLL: "MMMM Do YYYY LT", 
        LLLL: "dddd, MMMM Do YYYY LT" 
       } 
}); 

最後:

var x = moment().format('LTY'); 

但你必須檢查什麼打算做其他代碼。此外,每次更新moment.js源文件時,您都必須應用相同的更改,無法使用CDN,並且您的代碼無法使用標準的moment.js庫移植到其他站點。

所以堅持updateLocale辦事方式。或者只是做:

var LTY = 'MM/DD HH:mm'; 
 
var d = new moment().format(LTY); 
 
console.log(d)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.js"></script>

就大功告成了。

請注意,在這裏使用「locale」是一個誤用。格式首選項與用戶所在的位置(即它們的區域設置)無關,而「en」是在大量區域設置中使用的語言,這些區域設置對如何格式化日期有着非常不同的偏好。

+0

你在哪裏設置localFormattingTokens? – Ben

+0

@ Ben - 你必須編輯源代碼(localFormattingToken在版本2.14.1中的559行)。我已經展示瞭如何做到這一點,但不會因爲給出的理由而推薦它。 – RobG