我想显示自特定日期以来经过的时间,在这种情况下,是从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
解决方案来填补全球性。对我来说有点粗糙。
答案 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" });