如何在JavaScript/AngularJS中将日期减去1天?

15

借助 new Date(),我该如何实现这一点。 我的代码:

var temp =new Date("October 13, 2014 22:34:17");
console.log(new Date(temp-1));

要求:

before: Aug 4, 2014 11:59pm (EDT)
after:   Aug 3, 2014 11:59pm (EDT)

4个回答

42
你需要指定要减去的时间量。目前是1,但1代表什么单位?因此,请尝试使用getDate()获取天数,然后从中减去,再使用setDate()设置日期。
例如:
var temp = new Date("October 13, 2014 22:34:17");
temp.setDate(temp.getDate()-1);

1
这甚至可以处理0和负数,非常完美,谢谢! - seawave_23
3
如果新日期是某个月的第一天,这种方法效果不佳。 - Salik

13

简单的答案是您需要从中减去一天的毫秒数。因此可以尝试以下代码:

var today = new Date('October 13, 2014 22:34:17');
var yesterday = new Date(today.getTime() - (24*60*60*1000));
console.log(yesterday);

问题在于这实际上会让你提前24小时,但由于夏令时调整等原因,并不总是提前一整天。如果这正是你想要的,那就没问题。如果你想要更复杂的功能,请查看moment.js


只需执行 yesterday.sethours(23,59,59,999),即可获取昨天午夜的日期。 - markhorrocks
1
毫秒(1/1000),而不是微秒(1/1000000)。 - yktoo
这会在夏令时/冬令时的减法计算中造成问题! - seawave_23
1
正如答案中所指出的:“这确实让你提前了24小时,但由于夏令时等原因,并不总是提前一天。” 然而,在某些情况下,它仍然适用,因为仅仅减去一天并不足够。 - Prisoner

7
您可以像这样从今天日期减去一天:
var yesterday = new Date(new Date().setDate(new Date().getDate()-1));

这个答案最好,因为它可以继续支持像.getFullYear()这样的方法,而不需要进行任何额外的转换。 - Twitch
我也试过了,但第一个答案有一个漏洞,那就是当新日期是某个月的第一天时,你从中减去1-2天。谢谢。 - Salik

0

只需从一个日期减去另一个日期即可。您可以通过单击此链接进行日期相减url来实现。


虽然此链接可能回答了问题,但最好在此处包含答案的必要部分并提供该链接作为参考。仅有链接的答案如果链接页面更改则可能变得无效。-【来自审阅】 - Moritz Ringler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接