-2

世界中のさまざまなタイム ゾーンの時刻を表示するために作成したカスタム スクリプトに問題があります。分が 10 未満の場合は、HH:MM ではなく、HH:M と表示されます。10 未満の場合に HH:0M になるように変更するにはどうすればよいですか?

スクリーンショット:

脚本:

$(document).ready(function() {
    function calculateTime(offset) {
        var currentDate = new Date()
        utc = currentDate.getTime() + (currentDate.getTimezoneOffset() * 60000);
        newDate = new Date(utc + (3600000*offset));
        return (newDate.getHours() === 0) ? 12 : ((newDate.getHours() > 12) ? newDate.getHours() - 12 : newDate.getHours()) + ' : ' + newDate.getMinutes() + ' ' + ((newDate.getHours() >  11) ? 'PM' : 'AM');
    }
    function displayTimes() {
        $(".chicago").html(calculateTime("-6"));
        $(".london").html(calculateTime("+1"));
        $(".shanghai").html(calculateTime("+8"));
    };
    displayTimes();
    window.setInterval(displayTimes, 5000);
});

HTML:

<table>
    <tr>
        <td><strong>Chicago</strong></td>
        <td align="right" class="time chicago">12:00PM</td>
    </tr>
    <tr>
        <td><strong>London</strong></td>
        <td align="right" class="time london">12:00PM</td>
    </tr>
    <tr class="last">
        <td><strong>Shanghai</strong></td>
        <td align="right" class="time shanghai">12:00PM</td>
    </tr>
</table>
4

5 に答える 5

1

関数Date.getMinutes()は 0 から 59 までの数値を返します。したがって、10 分未満かどうかを確認し、そうであれば先頭に 0 を追加する必要があります。次のようなものです。

var minutes = newDate.getMinutes();
if(minutes < 10) {
    minutes = '0' + minutes;
}
return (newDate.getHours() === 0) ? 12 : ((newDate.getHours() > 12) ? newDate.getHours() - 12 : newDate.getHours()) + ' : ' + minutes + ' ' + ((newDate.getHours() >  11) ? 'PM' : 'AM');

あなたのコード全体で:

$(document).ready(function() {
    function calculateTime(offset) {
        var currentDate = new Date()
        utc = currentDate.getTime() + (currentDate.getTimezoneOffset() * 60000);
        newDate = new Date(utc + (3600000*offset));
        var minutes = newDate.getMinutes();
        if(minutes < 10) {
            minutes = '0' + minutes;
        }
        return (newDate.getHours() === 0) ? 12 : ((newDate.getHours() > 12) ? newDate.getHours() - 12 : newDate.getHours()) + ' : ' + minutes + ' ' + ((newDate.getHours() >  11) ? 'PM' : 'AM');
    }
    function displayTimes() {
        $(".chicago").html(calculateTime("-6"));
        $(".london").html(calculateTime("+1"));
        $(".shanghai").html(calculateTime("+8"));
    };
    displayTimes();
    window.setInterval(displayTimes, 5000);
});
于 2013-02-19T14:14:21.900 に答える
1

これはゼロパディングと呼ばれます。基本的に、数値を文字列に変換し、"0"10 未満の場合にのみ文字を追加します。

function zeroPad(num) {
    if ( num<10 ) {
        return "0"+num;
    } else {
        return num.toString();
    }
}

使用法:

zeroPad(newDate.getMinutes()) // returns strings "05", or "15", or "01" etc.
于 2013-02-19T14:21:09.223 に答える
0

以下のように試してみてください...

(newDate.getMinutes() < 10 ? "0" : "" ) + newDate.getMinutes()

あなたのコードにこれを追加してください:

return (newDate.getHours() === 0) ? 12 : ((newDate.getHours() > 12) ? newDate.getHours() - 12 : newDate.getHours()) + ' : ' + (newDate.getMinutes() < 10 ? "0" : "" ) + newDate.getMinutes() + ' ' + ((newDate.getHours() >  11) ? 'PM' : 'AM');
于 2013-02-19T14:17:05.460 に答える
0

関数自体から抽象化すると、分数が10未満であるかどうかを確認し、結果を0で埋めることができます。必要に応じて、三項演算子を使用してインラインで実行できます。それ以外の場合は、すでに回答されている同様の質問を確認することをお勧めします:jQuery Format Time

于 2013-02-19T14:17:34.967 に答える
0

数字をゼロで埋めてみてください。

function zeroFill(number, width) {
    width -= number.toString().length;
    if (width > 0) {
        return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number;
    }
    return number + ""; // always return a string
}


return (newDate.getHours() === 0) ? 12 : ((newDate.getHours() > 12) ? zeroFill(newDate.getHours() - 12, 2) : zeroFill(newDate.getHours(), 2)) + ' : ' + zeroFill(newDate.getMinutes(),2) + ' ' + ((newDate.getHours() >  11) ? 'PM' : 'AM');
于 2013-02-19T14:15:59.107 に答える