实现一个功能:
以小时计算,如活动到期时间为'20:30:50',以当前的时间考试计算离到达目标是时间剩余多少‘小时:分:秒’的功能。
我的初步代码是:
setTime() {
const currentTime = new Date();
const arr = this.props.data.aimTime.split(':'); //输入字符串格式的时间格式,如:'20:30:45'
const aimTime = 3600000 * (parseInt(arr[0])) + 60000 * (parseInt(arr[1])) + 1000 * (parseInt(arr[2])); //计算目标时间毫秒数
const cuTime = (3600000 * currentTime.getHours()) + (60000 * currentTime.getMinutes()) + (1000 * currentTime.getSeconds()); //当前时间毫秒数
const remainTime = aimTime - cuTime; //一天内离目标时间剩余毫秒数
const hours = parseInt(arr[0]) - currentTime.getHours(); //剩余小时
const min = parseInt(arr[1]) > 0 ? (60 - currentTime.getMinutes() + parseInt(arr[1]))
: 60 - currentTime.getMinutes(); //剩余分钟,有问题感觉
const second = parseInt(arr[2]) > 0 ? (60 - currentTime.getSeconds() + parseInt(arr[2]))
: 60 - currentTime.getSeconds(); //剩余秒,有问题感觉
remainTime > 0 &&
this.setState({
hours: hours > 9 ? hours : '0' + hours,
min: min > 9 ? min : '0' + min,
second: second > 9 ? second : '0' + second,
});
}
这样写分钟和秒数不正确,该如何更正,或者有什么更好的方式实现这一功能
举个栗子:当前时间09:01:01, 目标时间10:59:59
按照你的计算方法,剩余秒数和分钟数是会超过60的。但是超过60,在数学上应该进位的,你少了进位操作。
再举个栗子,十进制里面,计算减法计算,是 个、十、百分开计算的么?
附上自己的代码: