打印日期和奇怪行为的前导零

时间:2015-04-15 07:42:08

标签: javascript

我准备了一个函数,用一个数字为填充数设置一个前导零:

function pretty_time_string(num) {
    return ( num < 10 ? "0" : "" ) + num;
}

然后我每次需要时都会调用它,尤其是使用它来打印日期和时间:

function printHMS(d){
    if (!(d instanceof Date)) d = new Date(d);
    return d.getHours() + ":" 
    + pretty_time_string(d.getMinutes()) + ":" +
        + pretty_time_string(d.getSeconds());
}

现在我在直接调用第一个函数或通过第二个函数看到一个奇怪的行为:

d = new Date(1429082763978);
document.body.innerHTML = 'Why this is with leading zero: '
    + pretty_time_string(d.getSeconds())
    + '<br>And this not? ' + printHMS(d);

结果如下:https://jsfiddle.net/gbh4xq9e/1/

Why this is with leading zero: 03
And this not? 9:26:3

我真的无法弄清楚为什么会出现这种奇怪的行为

更新1: 我也尝试了这个:https://jsfiddle.net/gbh4xq9e/3/

d.setMinutes(1);
document.body.innerHTML += '<br>UPDATE 1:<br>What about minutes? '
    +  printHMS(d);

并且结果似乎是分钟的前导零,但不是秒。

1 个答案:

答案 0 :(得分:4)

你在printHMS - 函数转换字符串&#34; 03&#34;在结合之前到3号。

以下两个陈述均属实:

"3:26:" + + "03" === "3:26:3"
"3:26:" + "03"   === "3:26:03"

因此printHMS - 函数可能是

function printHMS(d){
    if (!(d instanceof Date)) d = new Date(d);
    return d.getHours() + ":" +
        pretty_time_string(d.getMinutes()) + ":" + 
        pretty_time_string(d.getSeconds());
}

有关完整的工作代码,请参阅https://jsfiddle.net/gbh4xq9e/4/