Das ist nicht wirklich schön, wenn es gerade der 1. Tag des Monats ist. dann kommt der nullte Tag raus.
Nein, es kommt der letzte Tag des vorherigen Monats heraus.
new Date(2010, 0, 1, 12)
Fri Jan 01 2010 12:00:00 GMT+0100
new Date(2010, 0, 0, 12)
Thu Dec 31 2009 12:00:00 GMT+0100
new Date(2010, 0, -1, 12)
Wed Dec 30 2009 12:00:00 GMT+0100
usw., 0 und negative Werte sind durchaus nutzbar.
Würde
Zeit.setDate(Zeit.getDate() - 1);das Problem lösen?
Ja. (t.setTime(t.getTime() - (1000 * 60 * 60 * 24)) und dergleichen beachten die Zeitumstellung nicht.)
Und ein neues Datumsobjekt zu erzeugen muss auch nicht sein.
Wenn man sowieso zwei neue Datumsobjekte braucht, halte ich das durchaus für sinnvoll:
var now = new Date;
var a = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);
var b = new Date(now.getFullYear(), now.getMonth(), now.getDate());
alert(now + '\n' + a + '\n' + b);
Mathias