显示当前时间的脚本显示12:5而不是12:05

时间:2013-02-19 14:10:52

标签: javascript jquery time

我遇到了一些问题,我写了一些自定义脚本来显示世界各地不同时区的时间。不是说HH:MM,如果分钟数小于10,它就说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>

5 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:1)

这称为零填充。基本上,您将数值转换为字符串,并且只有在小于10时才添加"0"字符。

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

用法:

zeroPad(newDate.getMinutes()) // returns strings "05", or "15", or "01" etc.

答案 2 :(得分: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');

答案 3 :(得分: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');

答案 4 :(得分:0)

从函数本身抽象,您可以检查分钟数是否小于10,填充结果为0.如果您愿意,可以使用三元运算符进行内联运算。否则,您可能需要检查已回答的类似问题:jQuery Format Time