JavaScript:如何计算2天前的日期?

dat*_*789 72 javascript

可能重复:
从javascript中的日期减去天数

我有一个JavaScript基本上返回2天前的日期.它如下:

var x;
var m_names = new Array("January", "February", "March", 
    "April", "May", "June", "July", "August", "September", 
    "October", "November", "December");

var d = new Date();
var twoDaysAgo = d.getDate()-2;  //change day here
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
var x = twoDaysAgo + "-" + m_names[curr_month] + "-" + curr_year;

document.write(x);
Run Code Online (Sandbox Code Playgroud)

假设今天是2012年12月12日,以上将返回2012年12月10日的日期.我不认为这会在我们进入新的月份时动态起作用,或者,将日期从-2更改为-15.它只能从本月3日开始工作.

我怎么能修改这个,所以当它是2012年12月12日今天,我希望它能在15天前将它更新给我,它应该是2012年11月27日......而不是2012年12月3日?

任何帮助赞赏.谢谢!我是一个Javascript新手.

Rob*_*obG 128

如果您有日期对象,可以通过从日期中减去两个来将其设置为前两天:

var d = new Date();
d.setDate(d.getDate() - 2);
console.log(d.toString());

// First of month
var c = new Date(2017,1,1); // 1 Feb -> 30 Jan
c.setDate(c.getDate() - 2);
console.log(c.toString());

// First of year
var b = new Date(2018,0,1); // 1 Jan -> 30 Dec
b.setDate(b.getDate() - 2);
console.log(b.toString());
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是对的.重要的是要注意,如果`getDate() - x`为0或负数,它将移动到上个月.@Petrov - `getDate()`不会在几毫秒内运行. (4认同)
  • @Petrov-[* setDate *](http://ecma-international.org/ecma-262/6.0/index.html#sec-date.prototype.setdate)方法修改日期对象并返回新的时间值。将其传递给Date构造函数不必要地创建具有相同[* timevalue *](http://ecma-international.org/ecma-262/6.0/index.html#sec-date-value)的新Date。 (2认同)
  • @ bpavlov-在你之前看看McAden的评论.有用. (2认同)

pfr*_*ied 30

您可以执行以下操作

?var date = new Date();
var yesterday = date - 1000 * 60 * 60 * 24 * 2;   // current date's milliseconds - 1,000 ms * 60 s * 60 mins * 24 hrs * (# of days beyond one to go back)
yesterday = new Date(yesterday);
console.log(yesterday);?
Run Code Online (Sandbox Code Playgroud)

日期以毫秒为单位提供,您今天减去两天,并使用该毫秒数创建一个新日期

  • @ FemiOni-接受的答案也是如此.这个答案假定所有日子都是24小时.在夏令时更改时,它们可能是23或25小时,因此上述情况会在这些情况下提供错误的结果. (8认同)
  • 实际上,使用 date 模块也可以解决这个问题。 (3认同)
  • 我会选择这个答案,因为这可以解决几个月的重叠 (2认同)