Meteor - 如何显示自日期起的经过时间

时间:2016-09-09 04:13:28

标签: javascript meteor meteor-blaze

我想显示自特定日期以来经过的时间,在这种情况下,是从DB返回的记录创建日期。

模板简化:

<template name="shiftduty">
   Uptime: {{uptime}}
</template>

以下仅在页面加载期间调用一次,但我需要每秒更新一次。处理这个问题最优雅的方法是什么?

Template.shiftduty.onCreated(function () {
    Meteor.subscribe('shifts');
 });

Template.shiftduty.helpers({   
  'uptime': ()=>{
    var doc = Shifts.findOne({},{sort: {last_update:-1}});
    var mins = (new Date().getTime() - doc.create_date.getTime())/60000;
    return mins.toFixed(1) + ' mins ago';
 }
});

我是否再次使用Meteor.setInterval尝试ReactiveVar?我似乎无法与它们一起得到它。我不是那么热衷于用我见过的Session.set/get解决方案来填补全球性。对我来说有点粗糙。

2 个答案:

答案 0 :(得分:0)

  

这包括momentjs和reactiveVar libs。我希望这会是   有益

Student
-------------
std_id  PK
std_name
std_age


Library
----------
book_id  PK
book_name
book_isbn

OutGoing
----------------
studet_id
book_id
book_name
time

你可以这样格式化:hh / mm

Template.yourTemplate.onRendered(function() {
        Session.set('clock',0);
        self.handle = Meteor.setInterval((function() {
            var secunds = Session.get('clock');
            Session.set('clock',secunds+1);
        }), 1000);
    });



Template.yourTemplate.helpers(function() {
       uptime:function(){
          var doc = Shifts.findOne({},{sort: {last_update:-1}});
          if(doc){
               var date = new Date(doc.create_date).getTime();
               var currentDiff = moment().diff(date, 'seconds');
               var seconds = new ReactiveVar(currentDiff);
               var duration = seconds.get() + Session.get('clock');
               return duration;
          }
       }
 });

Template.yourTemplate.onDestroyed(function() {
    Meteor.clearInterval(this.handle);
});

答案 1 :(得分:0)

使用ReactiveVar和SetInterval: -

  Template.shiftduty.onCreated(function () {
        Meteor.subscribe('shifts');    
        this.uptime = new ReactiveVar();
        Meteor.setInterval(() => {
          var doc = Shifts.findOne({},{sort: {last_update:-1}});
          var mins = (new Date().getTime() - doc.create_date.getTime())/60000;    
          this.uptime.set(mins)
        }, 1000);
     });

    Template.shiftduty.helpers({
      uptime: () =>  Template.instance().uptime.get().toFixed(1) + " mins ago"
    });