「yyyy-MM-dd」形式の文字列から日付を作成していますが、何らかの理由で常に前日に作成されます。日付を「2012-10-31」に設定すると、Date オブジェクトは実際には 10 月の 31 ではなく 30 になります。たとえば、次のようになります。
var d1=new Date('2012-10-31');
これを出力します:
Tue Oct 30 2012 19:30:00 GMT-0430 (Venezuela Standard Time)
誰かがなぜこれが起こるのか説明できますか?