在 Meteor 的 Handlebars 模板中格式化日期

Posted

技术标签:

【中文标题】在 Meteor 的 Handlebars 模板中格式化日期【英文标题】:Format a date from inside a Handlebars Template in Meteor 【发布时间】:2013-09-05 23:48:52 【问题描述】:

我从我的数据中获得了一个 ISO 格式的日期,而我真正想做的是直接从我的模板中修改我的日期格式。

像这样:

format my.context.date "myFormat"

我正在使用 moment 库,所以我可以这样写:

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

这会很好,因为我认为这是我应该能够做到这一点的地方。在我的模板中。

【问题讨论】:

您是否有机会遵循 *** 使用的问答格式?即用您的解决方案发布问题。否则有人我把它误认为是广告并杀死它。也不要忘记接受你的回答! @booyaa 感谢这一点。 【参考方案1】:

解决方案很简单,也许有人会觉得它很有用。 在大多数项目中,您有几种要使用的日期格式。 因此,用可读的名称定义格式是一种很好的方法。

对于这个例子,我只使用了“short”和“long”,但你会看到,它很容易扩展。

所以我在客户端脚本中创建了一个对象:

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

另外,我创建了一个 Handlebars 助手“formatDate”。

已编辑:现在您应该使用 UI 而不是 Handlebars

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

如您所见,我在 Helper 中使用了 moment.js 库。要安装它,只需在命令行中输入meteor add momentjs:moment

现在,在我的模板中的任何地方,我都可以将它与两个参数一起使用,如下所示:

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

如果您想创建自己的格式,请查看 momentjs 文档http://momentjs.com/docs/

编码愉快!

【讨论】:

最后的唠叨,请接受你的回答,它有助于搜索结果;) 这对我来说在 if(moment) 测试中失败了(Deps 重新计算函数的异常:TypeError: undefined is not a function)这是有道理的。我试过 (datetime instanceof moment) 但返回 false...这应该是什么? 抱歉,由于其他原因失败。我正在向日期时间输入一个时刻,返回时刻(日期时间)我得到一个带有完整时区值的字符串。如果我添加 .format("Anything at all") 我得到,来自 Deps 的异常重新计算函数:TypeError: undefined is not a function。有什么想法吗? 嗨彼得,很抱歉回答迟了。也许,您的库的加载顺序存在问题。你用mrt安装了moment吗? 你应该使用var f = DateFormats[format],否则你会泄露一个全局的f变量

以上是关于在 Meteor 的 Handlebars 模板中格式化日期的主要内容,如果未能解决你的问题,请参考以下文章

在 Meteor 中的字符串数组上使用 Handlebars #each 进行迭代

Meteor中的翡翠模板

如何在 Handlebars 模板中添加 console.log() JavaScript 逻辑?

在 Meteor Handlebars 括号 timestamp 中格式化日期

Meteor & Handlebars:每 N 项后的新行

Django 模板中的 Handlebars.js