On a project I'm currently working on in JavaScript, I'm using decimal formats so it's easier to calculate with rather than using an hour/minute format in strings (calendar related project). To display the time on the user's screen though, the timecode has to be shown as hh:mm.

I thought it would be great to use a String prototype function for this as it would allow me to use code like:

var time = 8.75;
document.write("Meeting at "+time.toTime()); // writes: Meeting at 8:45

So far, I've got that almost working, using:

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;
}

The problem, though, is that this will only work if the variable time is a string. Otherwise it will give an undefined error.

Would there be any way of applying the prototype to a different object in JavaScript, so that I don't have to use time.toString().toTime()?

Thanks!

有帮助吗?

解决方案

Firstly, you can add to the Number prototype. Many people will warn against modifying prototypes, which in many cases is justified. If there is a chance 3rd party scripts will be running alongside yours, it is a danger to modify prototypes.

Secondly, I simplified your code a little, using modulus, and floor to calculate the hrs and mins...

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());

其他提示

You can use Object.prototype.toTime.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top