jQuery添加前导0.“0”+ varName.slice(-2)对我不起作用

时间:2018-01-11 01:34:57

标签: jquery

在我的代码中,我使用了

var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var mins = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var sec = Math.floor((distance % (1000 * 60)) / 1000);

获取日,小时,分钟和秒。我想在小于10时向数字添加前导0.我试过

$(".mins").html('0'+ mins).slice(-2);

但是输出是三位数(例如30-> 030)。 但是当它是两位数时我不想要前导0,只有当它是一位数时才添加它。

我该如何纠正?

3 个答案:

答案 0 :(得分:0)

jQuery也有一个slice()方法,你正在切割jQuery对象而不是字符串。请注意,您已关闭html()并在其后链接slice()

更改为:

$(".mins").text( ('0'+ mins).slice(-2) );

或者为了可读性:

mins = ('0'+ mins).slice(-2);
$(".mins").text(mins);

答案 1 :(得分:0)

在ECMAScript 2017的Javascript中,String只有一个函数:

String.padStart(targetLength,padString)

targetLength是您想要字符串的长度,而padString是您要填充的字符。

那说mins的类型是数字,所以你必须转换为String来访问这个函数......简单的方法是mins.toString()但这是因为从你的特殊情况我们知道肯定分钟是数字(或NaN)类型,如果其他人阅读的情况类似但不同,你可以随时(mins+"")确保强制执行字符串(仍然不能防止NaN)。< / p>

现在实际使用:

// padStart of 2 will be 2 min...
$(".mins").html(mins.toString().padStart(2, "0")); // 30, 03, 303, etc...

现在,如果你不能依靠知道你的2017年好消息!有polyfill! Polyfills基本上检查当前的JavaScript版本是否知道函数,如果没有写入它们。

MDN Web Docs提供

你需要第二个,但第二个需要第一个......

String.prototype.repeat()String.prototype.padStart()

答案 2 :(得分:0)

以下是我的解决方案

  1. $(".mins").text( ('0'+ mins).slice(-2) ); //add leading 0 when minute is < 10.但这种方法几天都不起作用。

  2. 因此,为了添加前导日,我使用$(".days").text(days.toString().padStart(2, "0"));当天为三位或两位数时,输出为“原样”。当白天是&lt; 10,它增加了一个前导0。

  3. 所以我决定在所有的日子,小时,分钟和秒中使用.toString().padStart(2, "0"));

    感谢那些帮助我的人!