26

这两个堆栈溢出问题提出了一个类似的问题,但他们的解决方案似乎对我不起作用: Javascript Yesterday Javascript code for shows昨天的日期和今天的日期

给定一个日期,我需要前一天(前一天)的日期。这是上面建议的解决方案的小提琴,以及对我不起作用的场景: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);

对我来说,这提醒

如果今天是 2013 年 4 月 28 日星期日 00:00:00 GMT-0400(东部夏令时间),那么昨天是 2013 年 5 月 27 日星期一 11:12:06 GMT-0400(东部夏令时间)。

这显然是不正确的。为什么?

4

4 回答 4

53

你在进行一个全新的约会。

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

这将使您成为第一次约会的副本。当你打电话时setDate(),它只会影响当月的一天,而不是整个事情。如果您从原始日期的副本开始,然后将月份中的某一天向后设置,您将得到正确的答案。

于 2013-05-06T15:17:21.310 回答
12

试试这个:

var date = new Date('04/28/2013 00:00:00');
var yesterday = new Date(date.getTime() - 24*60*60*1000);
于 2013-05-06T15:19:19.617 回答
0

使用这个简单的功能:

private _getYesterdayDate(): Date{
  const yesterday:Date = new Date();
  yesterday.setDate(yesterday.getDate() - 1);
  return yesterday;
}

即使日期是the first day of a month,该功能也有效,并且您使用过date.getDate() - 1,它会last day in the previous month酌情给您

于 2022-03-03T13:02:47.777 回答
-4
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]);
于 2014-12-03T06:22:18.210 回答