作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我目前正在使用 JavaScript 进行的项目中,我使用十进制格式,因此比使用字符串中的小时/分钟格式(日历相关项目)更容易计算。不过,要在用户屏幕上显示时间,时间码必须显示为 hh:mm。
我认为为此使用 String 原型(prototype)函数会很棒,因为它允许我使用如下代码:
var time = 8.75;
document.write("Meeting at "+time.toTime()); // writes: Meeting at 8:45
到目前为止,我几乎可以使用:
String.prototype.toTime = function(){
var hrs = this.toString().slice(0,this.indexOf("."));
var min = Math.round(this.toString().slice(this.indexOf("."))/100*60);
min = min<10 ? "0"+min : min.toString();
return hrs+":"+min;
}
但问题是,只有当变量 time
是一个字符串时,这才有效。否则会报未定义错误。
是否有任何方法可以将原型(prototype)应用于 JavaScript 中的不同对象,这样我就不必使用 time.toString().toTime()
?
谢谢!
最佳答案
首先,您可以添加到Number
原型(prototype)。许多人会警告不要修改原型(prototype),这在许多情况下是合理的。如果第 3 方脚本有可能与您的脚本一起运行,那么修改原型(prototype)是很危险的。
其次,我稍微简化了您的代码,使用模数和下限来计算小时和分钟...
Number.prototype.toTime = function(){
var hrs = Math.floor(this)
var min = Math.round(this%1*60)
min = min<10 ? "0"+min : min.toString();
return hrs+":"+min;
}
var time = 8.25;
console.log("Meeting at "+time.toTime());
关于Javascript 原型(prototype)函数 : decimal time value to a time string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14978823/
我是一名优秀的程序员,十分优秀!