2013-09-02 51 views
29

Tôi nhận được Ngày được định dạng theo ISO từ Dữ liệu của tôi và những gì tôi thực sự muốn làm, là sửa đổi định dạng ngày của tôi trực tiếp từ Mẫu của tôi.Định dạng ngày tháng từ bên trong Mẫu Handlebars trong Meteor

như thế này:

{{format my.context.date "myFormat"}} 

Tôi đang sử dụng thư viện thời điểm, vì vậy tôi có thể viết một cái gì đó như thế này:

{{formatDate my.context.date "DD.MM.YYYY HH:mm"}} // 03.09.2013 18:12 

Nó sẽ được tốt đẹp, bởi vì tôi nghĩ đó là nơi mà tôi sẽ có thể làm điều này. Trong mẫu của tôi.

+1

Bất kỳ cơ hội nào bạn có thể thực hiện theo định dạng Giải Đáp mà StackOverflow sử dụng? tức là đăng câu hỏi với giải pháp của bạn. Nếu không ai đó sai lầm của tôi này cho một quảng cáo và giết nó. Cũng đừng quên chấp nhận câu trả lời của bạn! – booyaa

+0

@booyaa Cảm ơn thời điểm này. –

Trả lời

80

Giải pháp khá đơn giản và có thể ai đó sẽ thấy nó hữu ích. Trong hầu hết các dự án, bạn có một vài định dạng ngày bạn muốn sử dụng. Vì vậy, đó là một cách tiếp cận tốt để xác định các định dạng của bạn với các tên có thể đọc được.

Đối với ví dụ này, tôi chỉ cần 'ngắn' và 'dài', nhưng bạn sẽ thấy, nó rất dễ mở rộng.

Vì vậy, tôi đã tạo ra một đối tượng trong Script Khách hàng của tôi:

var DateFormats = { 
     short: "DD MMMM - YYYY", 
     long: "dddd DD.MM.YYYY HH:mm" 
}; 

Ngoài ra, tôi đã tạo ra một Helper tay lái "formatDate".

được sửa đổi: Bây giờ bạn nên sử dụng giao diện người dùng thay vì tay lái

// Deprecated since version 0.8.0 
Handlebars.registerHelper("formatDate", function(datetime, format) { 

// Use UI.registerHelper.. 
UI.registerHelper("formatDate", function(datetime, format) { 
    if (moment) { 
    // can use other formats like 'lll' too 
    format = DateFormats[format] || format; 
    return moment(datetime).format(format); 
    } 
    else { 
    return datetime; 
    } 
}); 

Như bạn thấy, tôi sử dụng moment.js lib trong Helper của tôi. Để cài đặt, chỉ cần nhập meteor add momentjs:moment từ dòng lệnh của bạn.

Và bây giờ, ở khắp mọi nơi trong Templates của tôi, tôi có thể sử dụng nó với hai params, như thế này:

{{formatDate MyISOString "short"}} // 02 September - 2013 
{{formatDate MyISOString "long"}} // Monday 02.09.2013 18:00 

Nếu bạn muốn tạo các định dạng của riêng bạn, hãy nhìn vào các tài liệu momentjs http://momentjs.com/docs/

Chúc mừng mã hóa!

+3

nag cuối cùng, xin vui lòng chấp nhận câu trả lời của bạn nó giúp kết quả tìm kiếm;) – booyaa

+0

Điều này là không cho tôi tại nếu (thời điểm) thử nghiệm (Ngoại lệ từ Deps recompute chức năng: TypeError: undefined không phải là một chức năng) mà loại có ý nghĩa. Tôi đã cố gắng (ví dụ về thời điểm của datetime) nhưng điều đó trả về false ... điều này sẽ là gì? –

+1

Xin lỗi, không thành công vì một lý do khác. Tôi đang nhập một thời điểm vào datetime, với thời điểm trả về (datetime) tôi nhận được một chuỗi trở lại với một giá trị timezoned đầy đủ. Nếu tôi thêm .format ("Bất cứ điều gì ở tất cả") tôi nhận được, Ngoại lệ từ Deps recompute chức năng: TypeError: undefined không phải là một chức năng. Bất kỳ ý tưởng? –