2017-01-11 18 views
0

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(); 
+1

'monthPrinter =" 0 "+ monthPrinterを変更します。 monthPrinter = monthPrinter + 1; 'to' monthPrinter = "0" +(monthPrinter + 1); '。数値に文字列 "0"を付加すると、文字列は** String **になります。それに '1'を追加すると' '1 ''が連結されます。 – Tushar

+0

その他の問題は、 'dayPrinter'ではなく' if''条件の中で 'datePrinter'を使用していることです。 [**デモ**](https://jsfiddle.net/tusharj/r3fme8bn/) – Tushar

+0

はい、それは働いた!ありがとう –

答えて

1

数値に文字列を追加または追加すると、結果が文字列になります。それをインクリメントしているときは、文字列を連結して追加しません。文字列をNumberに解析するには、parseInt()を再度使用する必要があります。

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();

+0

"0"パディングは日に動作しません。 – Yaje

0

あなたの当面の問題は、ということです。

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

が間違った順序です。 2つの数値を追加すると、数値が得られます。文字列と数値(または別の文字列)を追加すると、文字列が取得されます。だからあなたの場合に何が起こるかです:

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

また、あなたの一日のパディングは、あなたがチェックしているため期待通りに動作しません:あなたは順序を変更した場合

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

、あなたがより良い何かを得るでしょう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)); 
1

をあなたはスワップ二行

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

これは、数字を増やす代わりに1に追加されます。

あるいは、同じ文字列"0" CONCAT最初にして変数に1を追加し、言う

monthPrinter = "0" + (monthPrinter + 1); 

のように記述することができます。


他の問題はdatePrinterが第if条件ブロックに代わりdayPrinterで使用されている、ということです。

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 + 1); 
 
     //     ^   ^^^^ 
 
    } 
 

 
    if (dayPrinter < 10) { 
 
     // Changed here 
 
     dayPrinter = "0" + dayPrinter; 
 
    } 
 

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

 
datePrinter();

0

のコードでこれらの行を交換し、youllの所望の出力を得ます。

081を生成する文字列08に1を追加する月のプリンタの文字列に1を追加しようとしているため、間違った値を取得しています。あなたはこれらの行を入れ替える必要

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

monthPrinter = "0" + monthPrinter。このことができますhttps://jsfiddle.net/nsfqxou1/1/

希望:; monthPrinter = monthPrinter + 1として `

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

はここで働いてDEMOです!

関連する問題