2010-12-08 11 views
0
var date = new Date(); 
do { 
    var sel = date.toString(); 
    document.write(sel + "<br>"); 
    date.setDate(date.getDate()+1); 
    } while(date.getDate() != 2 && date.getMonth() != 2) 

なぜこれは1月1日に停止するのですか?... 2ヶ月早く停止していますか?

答えて

2

チェックhttp://jsfiddle.net/PYXeu/:2月は1であるので、数ヶ月がゼロをインデックス化していることに注意してくださいこれは、このような出力になります。

月1rstはのgetdate == 2.

編集持た:あなたは、これは2.02に行きたい場合はhttp://jsfiddle.net/PYXeu/1/

+0

もちろん。 &&。getMonthが0の場合、なぜそれは問題になるのですか? – Mantar

+1

'getMonth()== 2 '、または' getDate()== 2'のときに 'while'はあなたのコードで止まります。私のコードでは、 'getMonth()== 1'と 'getDate()== 3')の両方で停止します。 http://en.wikipedia.org/wiki/De_Morgan's_lawsを確認してください –

+0

Ohh interesting。私はリンクを感謝します! – Mantar

1

.getDateは2回目ですので、whileは実行できません。完了したら一度停止するには、3に増やす必要があります。

日付に追加する内容についてコード内で明示的に指定していた場合、それは害はありません。

+0

でコードをチェックし、getMonthが0のときのgetDateが2であれば、なぜそれが実行できません? – Mantar

+0

この条件はfalseと評価されるため、whileから脱落します。 getDate!= 2 - > false。 false && true == falseです。 –

0

3月または2日にヒットした場合、ループはもう実行されません。これは月が0から始まり、1月が0、12月が11であるからです。

0

JavaScriptは月が1月のインデックス0から始まります。必要に応じてループを調整する必要があります。

0

私は1月date.getMonth(1日に、月は0から始まると信じて)== 0、!= 2

+1

それは1月1日に止まるべきではありません...条件は真です。 –

+0

だからです!私は疑問を抱く必要があります。ありがとう。 –

3

1月2日で、最初の条件がfalseを返し、実行が停止しますので。

} while(date.getDate() != 2 || date.getMonth() != 1) 
// Stops when day is 2 and month is 1 (February) 

または::

} while(!(date.getDate() == 2 && date.getMonth() != 1)) 

どちらも同じことを意味私は、スクリプトがあなたの条件は次のようになります。その場合には、2月2日にすべての方法を、継続したいと仮定します。

... 
Fri Jan 28 2011 14:57:00 GMT+0200 
Sat Jan 29 2011 14:57:00 GMT+0200 
Sun Jan 30 2011 14:57:00 GMT+0200 
Mon Jan 31 2011 14:57:00 GMT+0200 
Tue Feb 01 2011 14:57:00 GMT+0200 

http://jsfiddle.net/MF7bR/

+0

最初のものはgetDate == 2またはgetMonth == 1で停止する必要があります。どちらが理にかなっていません。 2番目は1月1日に停止します。 – Mantar

+0

@Meke、あなたがしようとしていることを説明できますか?私が提供した例は有効であり、働いていて、まったく同じことを意味しています.2月1日には両方とも停止します。私が投稿したURLを見てください。 –

+0

@Meke、このようなコメントをする前にコードをテストする必要があります。@ Tatu Ulmanenは最初のものの上にあります。意味があります。 – codea

関連する問題