-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

尝试将数字填零。

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 回答
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 回答