Если переданный параметр имеет значение, лежащее вне предусмотренного диапазона, метод setDate
попытается соответствующим образом изменить значение экземпляра объекта Date. Например, если использовать для dayValue
значение 40, а значение месяца в объекте соответствует июню, то день и месяц в объекте будут равны 10 июля.
Пример: Изменение даты
// Меняем число на 24-е
theBigDay = new Date("July 27, 1962 23:30:00")
theBigDay.setDate(24)
можно и не только от 1 до 31
например:
Если передать в setDate отридцательное число, то оно отнимится от последнего числа предыдущего месяца (как будто текущей даты нет). Попробуйте запустить в JS-консоли:
window.SomeDate=new Date();
alert(window.SomeDate);
//выдаст Tue Nov 20 2012 00:00:00
window.SomeDate.setDate(-1);
alert(window.SomeDate);
//выдаст Tue Oct 30 2012 20:27:29 GMT+0200 (а не 19 ноябня, как ожидалось)
Я писал:
...
alert(window.SomeDate);
//выдаст Tue Oct 30 2012 20:27:29 GMT+0200 (а не 19 ноябня, как ожидалось)
"19 ноябня" тут вообще нипричем. Функция не добавляет, а устанавливает число в текущем месяце. Просто при -1 оно отнимает от начала текущего месяца одну дату, получается пред-последнее число предыдущего месяца.
(простите за ошибку)
var tmp= new Date();
tmp.setMonth(arrDate[1]-1);
tmp.setDate(arrDate[0]);
//tmp: Thu Jan 31 2013 14:13:59 GMT+0600 (Уральское время (зима))
А если задать сначала дату 31 а потом месяц
var tmp= new Date();
tmp.setDate(arrDate[0]);
tmp.setMonth(arrDate[1]-1);
то выдаст так
//tmp: Mon Jul 01 2013 14:13:59 GMT+0600 (Уральское время (зима))