【JavaScript】時間と秒の相互変換【Mootools】

2011年11月10日木曜日 12:05 By Unknown , In ,

Mootools大好きっ子(jQuery大嫌いっ子)の僕だよ!

JSってなんか時間まわりの使い勝手がイマイチな気がするのです。
PHPが使いやすいってだけなのかもしれませんけども。。

という訳でお題の通り「時間と秒の相互変換」を行う関数を書きました。
普通に関数書くのじゃつまらないので、StringクラスとNumberクラスに盛り込んでみましたとさ。

Number.implement({
    secToTime: function(hour) {
        if (arguments.length == 0) hour = true;
        
        var sec = this.toFloat();
        
        if (hour) {
            var hours = ("0" + Math.floor(sec / 3600).toString()).slice(-2);
            var minutes = ("0" + Math.floor(sec % 3600 / 60).toString()).slice(-2);
            var seconds = ("0" + Math.floor(sec % 60).toString()).slice(-2);
            return hours + ':' + minutes + ':' + seconds;
        } else {
            var minutes = ("0" + Math.floor(sec / 60).toString()).slice(-2);
            var seconds = ("0" + Math.floor(sec % 60).toString()).slice(-2);
            return minutes + ':' + seconds;
        }
    }
})

String.implement({
    timeToSec: function() {
        var regexp = /^(?:(?:(\d+):)?(\d+):)?(\d+)$/;
        var timeString = this.toString();
        var matches = timeString.match(regexp);
        if (matches == null) return false;
        
        var sec = 0;
        if (matches[1]) sec += matches[1].toInt() * 3600;
        if (matches[2]) sec += matches[2].toInt() * 60;
        sec += matches[3].toInt();
        
        return sec;
    },
    secToTime: function(hour) {
        if (arguments.length == 0) hour = true;
        var sec = this.toInt();
        return sec.secToTime(hour);
    }
})

var sec1 =       '60'.timeToSec();
var sec2 =    '30:00'.timeToSec();
var sec3 = '01:00:00'.timeToSec();

console.log(sec1); // 60
console.log(sec2); // 1800
console.log(sec3); // 3600

var time1 = sec1.secToTime();
var time2 = sec2.secToTime();
var time3 = sec3.secToTime();

console.log(time1); // 00:01:00
console.log(time2); // 00:30:00
console.log(time3); // 01:00:00

time1 = sec1.secToTime(false);
time2 = sec2.secToTime(false);
time3 = sec3.secToTime(false);

console.log(time1); // 01:00
console.log(time2); // 30:00
console.log(time3); // 60:00

あんまりテストしてないけど、多分大丈夫◎

0 コメント:

コメントを投稿