背景
- javasript语言计算时间一直都比较恶心,以前写react用antd发现antd都用moment.js库,这次写小程序需要做个类似掐秒表功能,记录下如何实现。
代码思路
- 做这个功能先把setInterval的返回值挂到全局上,这样在页面挂载或者结束时想清空计时不容易找不到丢了。然后需要导入Moment.js库。
- 还需要起始时间starttime,显示的持续时间displaydiff,方便计算的持续时间differtime。
- 用户点击开始计时时候,设定起始时间为Moment(),setdata并且入库。
- 可以先拿2小时计算下,主要就是把2个时间做成Moment对象,然后进行diff换成duration对象后就可以使用asXXX方法,可以把duration对象换成时分秒,然后就能约成多少小时多少分钟多少秒。
let starttime = moment();
function calcudiff() {
let internaltime = moment(that.data.internaltime);
let differtime = internaltime.diff(starttime, 'seconds');
differtime = moment.duration(differtime, 'seconds')
let hours = Math.floor(differtime.asHours())
let minute = Math.floor(differtime.asMinutes()) - hours * 60
let second = Math.floor(differtime.asSeconds()) - minute * 60
let fdiffer = hours + '小时' + minute + '分钟' + second + '秒'
that.setData({
displaydiff: fdiffer,
differtime: differtime
})
}
getApp().globalData.timer = setInterval(calcudiff, 1000);
- 停止时也是这个思路,需要加上以前的累计时间,把以前的累计时间和正在计时的时间统一换成秒,变成duration对象后用asxxx搞定。
let duringsecond=duration[0]*60*60+duration[1]*60;
let toast=differtime;
let disphour=Math.floor(toast.asHours());
let dispminute=Math.floor(toast.asMinutes())-disphour*60
differtime = differtime.asSeconds();
let tmp =differtime+duringsecond;
duringsecond=moment.duration(tmp,'seconds');
let hours = Math.floor(duringsecond.asHours());
let minutes=Math.floor( duringsecond.asMinutes()-hours*60);
that.setData({
duration:[hours,minutes]
});