0

この形式のテレビ番組の開始と継続時間があるとしましょう: 10:05.
私がやりたいことは、誰かがプログラム データを入力しているときに、プログラムの開始時間と期間を入力すると、コードがそれらを合計して、次のプログラムの開始時間を自動的に埋めることです。

これらの時間を秒に変換してから、操作後にフォーマットされた時間に再度変換しようとしていましたが、どうすればそれができるかわかりません。

function processTime(time) {    
    if (typeof time !== 'undefined') {
        var times = time.split(":");
        var minutes = times[0];
        var seconds = times[1];
        seconds = parseInt(seconds, 10) + (parseInt(minutes, 10) * 60);
    } else {
        var seconds = null;
    }
    return seconds;
}

function createTime(timestamp) {
    var output;
    if (typeof timestamp !== 'undefined') {
        // Problem is here, my timestamp is not standard unix timestamp
        var time = new Date(timestamp * 1000);
        var minutes = time.getMinutes();
        var seconds = time.getSeconds();
        output = minutes + ":" + seconds;
    }
    return output;
}

$progForm.delegate(".program-duration", 'keyup', function() {
        $(this).on('focusout', function() {
            var duration = processTime($(this).val());
            var startTime = processTime($(this).parent().prev().find(".program-time").val());
            if (duration && typeof duration !== 'undefined' && startTime && typeof startTime !== 'undefined') {
                var nextStart = duration + startTime;
                var $nextProgramTime = $(this).parent().parent().next().find(".program-time");
                if (parseInt($nextProgramTime.val()) < 1) {
                    $nextProgramTime.val(createTime(nextStart));
                }
            }
        });
    });


<form>
    <table>
        <tbody class="programs-inputs">
            <tr>
                <td><input type="text" class="program-time timepicker input-mini" name="programs[time][]" placeholder="00:00" /></td>
                <td><input type="text" class="program-duration timepicker input-mini" name="programs[duration][]" placeholder="00:00" /></td>
            </tr>
            <tr>
                <td><input type="text" class="program-time timepicker input-mini" name="programs[time][]" placeholder="00:00" /></td>
                <td><input type="text" class="program-duration timepicker input-mini" name="programs[duration][]" placeholder="00:00" /></td>
            </tr>
        </tbody>
    </table>
</form>
4

2 に答える 2

1

unix タイムスタンプは、1970 年の新年からの時間を示します。日付ではなく時間のみに関心があるため、unix タイムスタンプはおそらく適切ではありません。今までと逆のことをすればよいだけです。

var seconds = totalSeconds;
var hours = Math.floor(seconds / 3600);
seconds -= hours * 3600;
var minutes = Math.floor(seconds / 60);
seconds -= minutes * 60;

var timeString = leadingZero(hours) + ':' + leadingZero(minutes) + ':' + leadingZero(seconds);

これでは先頭のゼロが表示されませんが、修正はかなり簡単です。

function leadingZero(num) {
    var str = '';
    if (num < 10) {
        str += '0';
    }
    return str + num;
}
于 2013-04-22T21:59:39.183 に答える
1

processTimeアルゴリズムの逆を使用するだけです。

function createTime(timestamp) {
    if (typeof timestamp == 'number') {
        var seconds = timestamp % 60;
        var minutes = (timestamp - seconds) / 60;
       return ("0"+minutes).slice(-2) + ":" + ("0"+seconds).slice(-2);
    }
}

あなたの最初の試みは正しい方法でしたが、タイムゾーンプルーフではありませんでした. new Date(timestamp * 1000);は、 1970 年 1 月 1 日 00:00:00 UTCからのミリ秒の値を作成しますが、getMinutes()およびメソッドは、現在のローカルタイムゾーンgetSeconds()でそのタイムスタンプの値を返します。これは 30 分ずれている可能性があります。UTC に相当するもの ( 、) に切り替えると、機能します。オブジェクトでソリューションを使用すると、時間を含める必要がある場合、または完全な日付を含める必要がある場合でも、多くの手間が省けます:-).getUTCMinutes().getUTCSeconds()Date

于 2013-04-22T22:00:11.203 に答える