【问题标题】:JavaScript: how to calculate the date that is 2 days ago? [duplicate]JavaScript:如何计算 2 天前的日期? [复制]
【发布时间】:2012-11-30 01:54:17
【问题描述】:

可能重复:
Subtract days from a date in 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);

假设今天是 2012 年 12 月 12 日,上面将返回 2012 年 12 月 10 日的日期。我不认为这会随着我们进入新的一个月而动态工作,或者将日期从 -2 更改为 -15。它只会从本月 3 日开始生效。

我该如何修改它,以便今天是 2012 年 12 月 12 日并且我希望它返回 15 天前的日期,它应该是 2012 年 11 月 27 日......而不是 2012 年 12 月 -3 日?

任何帮助表示赞赏。谢谢! 我是 Javascript 新手。

【问题讨论】:

标签: javascript


【解决方案1】:

您可以执行以下操作

​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);​

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

【讨论】:

  • 我会选择这个而不是选择的答案,因为这会在几个月内处理重叠
  • 实际上,使用 date 模块也可以解决这个问题。
  • @FemiOni——公认的答案也是如此。这个答案假设所有的日子都是 24 小时。在夏令时更改时,它们是 23 或 25 小时,因此在这些情况下,以上将提供不正确的结果。
  • 这对于夏令时开关是否安全?我不这么认为。
【解决方案2】:

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

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());

【讨论】:

  • 这将返回毫秒,您必须将结果反馈给 Date 构造函数以获取日期对象。请参阅下面的@pfried 答案
  • @Petrov—setDate 方法修改日期对象并返回新的时间值。将它传递给 Date 构造函数会不必要地创建一个具有相同 timevalue 的新 Date。
  • 这个答案是正确的。需要注意的是,如果getDate() - x 为0 或负数,它将移至上个月。 @Petrov - getDate() 不以毫秒为单位。
  • 当日期为 'YYYY-MM-01' 或 'YYYY-MM-01' 时会发生什么?这行不通。
  • @bpavlov – 请参阅 McAden 在您之前发表的评论。它有效。
猜你喜欢
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2011-07-27
相关资源
最近更新 更多