Meteorjs& Handlebars:如何将函数放入数据库中的Value?

时间:2013-05-12 10:01:38

标签: meteor handlebars.js

我有一个Meteor Collection,我存储日期和时间(我的工作时间表)。时间保存为秒。

当我在模板中显示它们时,我所做的只是

Days.find({})

我可以在我的模板中使用它:

<template name="calendar">
  {{#each days}}
    <p>
      {{> day}}
    </p>
  {{/each}}
</template>

<template name="day">
  <p>
    {{date}} - {{time}}
  </p>
</template>

现在'时间'是几秒钟,它会显示像30240(以秒为单位的时间),但我真正想要显示的是8小时24米。如何向该模板添加一个计算小时和分钟的函数?

1 个答案:

答案 0 :(得分:1)

将您的时间转换为字符串

您可以在日常模板中添加帮助,将其转换为您想要的表单:

Template.day.helpers({
    niceTime:function() {

        var timeInMs = this.time; //'this' is the current data context
        var datetime = new Date(timeInMs); //convert this to a date object
        return datetime.toLocaleTimeString; //return the time in a locale string
    }
});

然后在您的模板中使用{{niceTime}}代替{{time}}

这也取决于你存储时间的方式。如果它在javascript unix时间内存储自1970年以来的毫秒或从一天开始的毫秒数。如果是几秒钟,您需要先将它乘以1000。如果您在将其存储在流星中时使用.getTime()来获取它,则可以按原样使用上述内容。

如果您从一天开始的几秒钟内存储,请将从1970年(unix时间开始)的毫秒数添加到您的时间。

var today = new Date();
var timeInMs = (this.time*1000) + new Date(today.getFullYear(),today.getMonth(),today.getDate()).toTime();

将您的日期存储为日期对象

总而言之,将日期存储为Date对象可能更好。然后,您可以根据需要获得toLocaleDateString()或超时toLocaleTimeString()的约会时间。根据浏览器的位置调整到不同的时区(因为它的核心将以unixtime存储日期和时间,以UTC为单位)。此外,您不必单独存储时间。