Форматирование даты из шаблона Handlebars в Meteor

Я получил дату в формате ISO из моих данных, и что я действительно хочу сделать, это изменить формат даты непосредственно из моих шаблонов.

такой:

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

Я использую библиотеку moment, поэтому я мог бы написать что-то вроде этого:

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

было бы неплохо, потому что я думаю, что это то место, где я должен быть в состоянии сделать это. В моем шаблоне.

1 ответов


решение довольно простое, и, возможно, кто-то найдет его полезным. В большинстве проектов есть несколько форматов даты, которые вы хотите использовать. Таким образом, это хороший подход для определения ваших форматов с читаемыми именами.

для этого примера я взял только "короткий" и "длинный", но вы увидите, что его очень легко расширить.

поэтому я создал объект в своем клиентском скрипте:

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

кроме того, я создал помощник руля "formatDate".

редактировать: теперь вы следует использовать UI вместо руля

// 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;
  }
});

как вы можете видеть, я использую данный момент.js lib в моем помощнике. Чтобы установить его, просто введите meteor add momentjs:moment из командной строки.

и теперь, везде в моих шаблонах я могу использовать его с двумя параметрами, например:

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

если вы хотите создать свои собственные форматы, взгляните на momentjs docs http://momentjs.com/docs/

удачи в кодировании!