如何在javascript中获取"约会前一天"?

Arb*_*ter 18 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);
Run Code Online (Sandbox Code Playgroud)

对我来说,那个警报

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

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

Poi*_*nty 38

你正在创造一个全新的约会.

var yesterday = new Date(date.getTime());
yesterday.setDate(date.getDate() - 1);
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你问我,这太傻了.他们应该称之为`setDay()`,而不是`setDate()`. (2认同)
  • @RobertHarvey:他们应该用JavaScript`Date`对象完成的大量事情会(并且可能确实)填充卷... (2认同)
  • 但要公平:一件正确的事情是,即使`date`是一个月的第一天,Pointy的代码也可以工作,所以`date.getDate()-1`为`0`。例如,如果`date`是3月1日,它将给您2月28日(或2月29日,视情况而定)。 (2认同)

Vad*_*dim 9

试试这个:

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