Как получить "за день до даты" в javascript?

Эти два вопроса задают аналогичный вопрос, но их решение, похоже, не работает для меня: Javascript Вчера Код Javascript для показа вчерашней даты и сегодняшней даты

Учитывая дату, мне нужна дата предыдущего дня (за день до этого). Здесь сценарий с предложенным выше решением и сценарий, который не работает для меня: http://jsfiddle.net/s3dHV/

var date = new Date('04/28/2013 00:00:00');
var yesterday = new Date();
yesterday.setDate(date.getDate() - 1);
alert('If today is ' + date + ' then yesterday is ' + yesterday);

Для меня это предупреждает

Если сегодня Солнце 28 апреля 2013 00:00:00 GMT-0400 (Восточное дневное время) тогда вчера понедельник 27 мая 2013 11:12:06 GMT-0400 (восточный Дневное время).

Это явно неверно. Зачем?

Ответ 1

Вы делаете совершенно новую дату.

var yesterday = new Date(date.getTime());
yesterday.setDate(date.getDate() - 1);

Это сделает вам копию первой даты. Когда вы вызываете setDate(), это влияет только на день месяца, а не на все. Если вы начнете с копии исходной даты, а затем установите день месяца назад, вы получите правильный ответ.

Ответ 2

Попробуйте следующее:

var date = new Date('04/28/2013 00:00:00');
var yesterday = new Date(date.getTime() - 24*60*60*1000);

Ответ 3

var allmonths = [
    '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'
];
var alldates = [
    '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',
    '11', '12', '13', '14', '15', '16', '17', '18', '19', '20',
    '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'
];

var today = "2014-12-25";   
var aDayBefore = new Date(today);
aDayBefore.setDate(aDayBefore.getDate() - 1);

document.write(aDayBefore.getFullYear() + '-' + allmonths[aDayBefore.getMonth()] + '-' + alldates[aDayBefore.getDate() - 1]);