为什么这段代码运行错误

时间:2017-01-11 02:58:28

标签: javascript date

我正在尝试使用日期格式打印日期,例如09/05/1998,但是当我运行代码时,我得到081/5/1998 我做错了什么?

var c = new Date("September 5, 1998 08:45:00");

function datePrinter(){
var monthPrinter = c.getMonth();
var dayPrinter = c.getDate();
var yearPrinter = c.getFullYear();


if(monthPrinter < 10){
monthPrinter = "0" + monthPrinter;
monthPrinter = monthPrinter + 1;
}
if(datePrinter < 10){
datePrinter = "0" + dayPrinter;
} 

document.write(monthPrinter + "/" +dayPrinter + "/" + yearPrinter);


}

datePrinter();

5 个答案:

答案 0 :(得分:1)

在为数字前置或附加字符串时,结果将变为字符串。当你递增它时,它将进行字符串连接而不是添加。您需要再次使用parseInt()将字符串解析为Number。

&#13;
&#13;
var c = new Date("September 5, 1998 08:45:00");

function datePrinter(){
var monthPrinter = c.getMonth() + 1;
var dayPrinter = c.getDate();
var yearPrinter = c.getFullYear();

if(monthPrinter < 10){
monthPrinter = "0" + monthPrinter;
}
if(dayPrinter < 10){
dayPrinter = "0" + dayPrinter;
} 

document.write(monthPrinter + "/" +dayPrinter + "/" + yearPrinter);


}

datePrinter();
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您换了两行

EXPLAIN SELECT ...

导致monthPrinter = "0" + monthPrinter; monthPrinter = monthPrinter + 1; 被附加到字符串而不是增加数字。

或者,同样可以写成

1

表示首先在变量中加1,然后连接字符串monthPrinter = "0" + (monthPrinter + 1);

其他问题是,在第二个"0"条件块中使用datePrinter代替dayPrinter

if

答案 2 :(得分:0)

你当前的问题是:

monthPrinter = "0" + monthPrinter;
monthPrinter = monthPrinter + 1;

的顺序错误。当你添加两个数字时,你会得到一个数字。添加字符串和数字(​​或其他字符串)时,会得到一个字符串。那么在你的情况下会发生什么:

monthPrinter = "0" + monthPrinter;   // S + I -> S ("08")
monthPrinter = monthPrinter + 1;     // S + I -> S ("081")

如果您更改订单,您将获得更好的结果:

monthPrinter = monthPrinter + 1;     // I + I -> I (9)
monthPrinter = "0" + monthPrinter;   // S + I -> S ("09")

此外,您的日期填充无法按预期工作,因为您检查datePrinter,函数而不是dayPrinter变量。

另外,创建用于在文档中打印日期的函数是非常特定的用例。你可以通过更通用的功能灵活地将它格式化为你想要的字符串,然后你可以在更多的情况下重复使用它,这样会好得多:

function dateAsDdMmYyyy(dt) {
    var mm = dt.getMonth() + 1;
    var dd = dt.getDate();
    var yyyy = dt.getFullYear();
    if (mm < 10) { mm = "0" + mm; }
    if (dd < 10) { dd = "0" + dd; }

    return mm + "/" + dd + "/" + yyyy;
}

var sep5_88 = new Date("September 5, 1998 08:45:00");
document.write(dateAsDdMmYyyy(sep5_88));

答案 3 :(得分:0)

在代码中替换这些行,您将获得所需的输出。

你得错了,因为你试图在月份打印机中为一个字符串添加1,它将1添加到生成081的字符串08。

if(monthPrinter < 10)
{
   monthPrinter = monthPrinter + 1;
   monthPrinter = "0" + monthPrinter;
}
if(datePrinter < 10)
{
   datePrinter = "0" + dayPrinter;
}

答案 4 :(得分:0)

您需要交换这些行,

monthPrinter =“0”+ monthPrinter; monthPrinter = monthPrinter + 1;`

如,

monthPrinter = monthPrinter + 1;
monthPrinter = "0" + monthPrinter; 

以下是有效的演示: https://jsfiddle.net/nsfqxou1/1/

希望这有帮助!