2012-09-11 45 views
1

如何在模板內格式化時間戳?我遵循一個建立聊天的教程,它可以工作。現在我利用一些功能擴展了聊天功能,如刪除郵件並將時間放在郵件前。但是,當我在模板內寫入{{timestamp}}時,UNIX時間戳被給出。我如何格式化它以顯示時間'6:12'。時間戳存儲在消息集合中。在模板中顯示格式化的時間戳

是操作

Template.Messages.created = function () { ... }

函數內的時間戳正確的地方?

在此先感謝。

回答

4

雖然在這種情況下不是必需的,但我會建議使用Moment.js,它使得在JavaScript中處理日期和時間變得輕而易舉。

您可以安裝大氣包或下載script到您的client目錄,然後使用類似下面的一個幫手: -

Template.Messages.helpers({ 
    created: function() { 
     var time = moment(this.timestamp); 
     return time.format('h:mm a'); 
    } 
}); 

注:我認爲timestamp是VAR上上下文對象。

1

如果你想避免圖書館和JavaScript日期對象來操作,我建議(假定日期是ISO格式2010-06-15T00:00:00,至極你可以從日期得到。 toISOString()):

實施格式化方法(感謝JavaScript equivalent to printf/string.format),把它放在即LIB/utils.js:

String.prototype.format = function(args, index) { 
    return this.replace(/{(\w+)}/g, function(match, number) { 
    return typeof args[index[number]] != 'undefined' 
     ? args[index[number]] 
     : match 
    ; 
    }); 
}; 

創建助手(把它放到客戶端/ client.js)

Handlebars.registerHelper('formatDate',function(input, pattern){ 
    var iso = /^(\d{4})(?:-?W(\d+)(?:-?(\d+)D?)?|(?:-(\d+))?-(\d+))(?:[T ](\d+):(\d+)(?::(\d+)(?:\.(\d+))?)?)?(?:Z(-?\d*))?$/; 
    if(this[input]) { 
     var parts = this[input].match(iso); 
      return pattern.format(parts, {yyyy:1,MM:4,dd:5,hh:6,mm:7,ss:8,SSS:9}); 
     } 
    return this[input]; 
}); 

使用助手:

{{#each logs}} 
    <tr> 
     <td>{{formatDate 'ts' '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss}'}}</td> 
1

看一看這個包swag,提供了很多有用的車把助手。

結帳的日期/時間助手:https://github.com/elving/swag#dates

您可以輕鬆地爲格式化日期/時間,如:

var date = new Date() 


{{formatDate date "%m/%d/%Y"}} 
{{formatDate date "%I:%M%p"}} 
{{formatDate date "%F"}} 
{{formatDate date "%Y%m%dT%H%M%S%z"}} 

07/26/2015 
11:38PM 
2015-08-28 
20150828T233805-0004