Как получить "за день до даты" в 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]);