46

我从今天开始计算日期前 12 天。但它不会返回正确的日期。例如,对于今天 dat,11/11/2013 in (mm/dd/yyyy),它返回 10/30/2013,而它应该返回 10/31/2013。

这是代码

var d = new Date();
d.setDate(d.getDate() - 12);
d.setMonth(d.getMonth() + 1 - 0);
var curr_date = d.getDate();
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
if (curr_month < 10 && curr_date < 10) {
    var parsedDate = "0" + curr_month + "/" + "0" + curr_date + "/" + curr_year;
    alert(parsedDate);
} else if (curr_month < 10 && curr_date > 9) {
    var parsedDate = "0" + curr_month + "/" + curr_date + "/" + curr_year;
    alert(parsedDate);
} else if (curr_month > 9 && curr_date < 10) {
    var parsedDate = curr_month + "/" + "0" + curr_date + "/" + curr_year;
    alert(parsedDate);
} else {
    var parsedDate = curr_month + "/" + curr_date + "/" + curr_year;
    alert(parsedDate);
}
4

12 回答 12

68

问题解决了

var days; // Days you want to subtract
var date = new Date();
var last = new Date(date.getTime() - (days * 24 * 60 * 60 * 1000));
var day =last.getDate();
var month=last.getMonth()+1;
var year=last.getFullYear();
于 2013-12-02T13:44:18.903 回答
66

纯js一行解决方案:

new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)  // Tue Feb 04 2020 13:50:37 GMT...
  1. new Date() - 从计算的毫秒时间创建 Date 对象。
  2. Date.now() - 从 1970 年开始以毫秒为单位给出时间。
  3. 7(天)* 24(小时)* 60(分钟)* 60(秒)* 1000(毫秒)= 604800000 或 7 天(以毫秒为单位)。

如果您没有计划更改减去的值,则可以使用计算值,或者为轻松更改减去的天数、分钟等而计算。


如果您打算更频繁地使用日期和时间,我建议使用date- fns或dayjsdate-fns 似乎更好

const subDays = require('date-fns/subDays')
subDays(new Date(), 7)

PS为什么不是moment.js?Moment.js 被认为是维护模式下的遗留项目。它没有死,但它确实完成了。见https://momentjs.com/docs/#/-project-status/

于 2019-02-23T18:20:36.423 回答
23

您可以使用以下代码获取从今天日期到 7 天前的日期

var date = new Date();
date.setDate(date.getDate() - 7);

var finalDate = date.getDate()+'/'+ (date.getMonth()+1) +'/'+date.getFullYear();
于 2018-04-19T04:31:42.753 回答
12

试图减去天数是很棘手的。最好从时间戳中减去并更改日期。

要减去 12 天,请执行以下操作:

   var d = new Date();
   var ts = d.getTime();
   var twelveDays = ts - (12 * 24 * 60 * 60 * 1000);
   d.setUTCDate(twelveDays);
于 2013-11-11T15:48:10.067 回答
4

更新 :)

var timeFrom = (X) => {
    var dates = [];
    for (let I = 0; I < Math.abs(X); I++) {
        dates.push(new Date(new Date().getTime() - ((X >= 0 ? I : (I - I - I)) * 24 * 60 * 60 * 1000)).toLocaleString());
    }
    return dates;
}
console.log(timeFrom(-7)); // Future 7 Days
console.log(timeFrom(7)); // Past 7 Days

输出

[
  '7/26/2019, 3:08:15 PM',
  '7/27/2019, 3:08:15 PM',
  '7/28/2019, 3:08:15 PM',
  '7/29/2019, 3:08:15 PM',
  '7/30/2019, 3:08:15 PM',
  '7/31/2019, 3:08:15 PM',
  '8/1/2019, 3:08:15 PM'
]
[
  '7/26/2019, 3:08:15 PM',
  '7/25/2019, 3:08:15 PM',
  '7/24/2019, 3:08:15 PM',
  '7/23/2019, 3:08:15 PM',
  '7/22/2019, 3:08:15 PM',
  '7/21/2019, 3:08:15 PM',
  '7/20/2019, 3:08:15 PM'
]
于 2019-07-26T18:57:41.517 回答
3

要以 Array 的形式获取过去的日子,请使用此代码

结果见控制台

const GetDays = (d,Mention_today=false)=>{
//Mention today mean the array will have today date 
var DateArray = [];
var days=d;
for(var i=0;i<days;i++){
if(!Mention_today && i==0){i=1;days+=1}
var date = new Date();
var last = new Date(date.getTime() - (i * 24 * 60 * 60 * 1000));
var day =last.getDate();
var month=last.getMonth()+1;
var year=last.getFullYear();
const fulld = (Number(year)+'-'+Number(month)+'-'+Number(day)) // Format date as you like
DateArray.push(fulld);
}
return DateArray;
}

console.log(GetDays(5)) //Will get the past 5 days formated YY-mm-dd

于 2020-04-21T08:49:22.490 回答
3

Date.prototype.addDays = function(days) {
    // Add days to given date
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

let today = new Date()

console.log(today.addDays(-7))

于 2020-05-25T08:30:31.790 回答
1

第一:获取当前日期

 const startingDate = new Date();

第二:得到你想要的日期!!:如果你直接使用setDate改变startingDate,它会改变这个变量。

const sevenDaysBeforeDate = new Date(new Date().setDate(new Date().getDate() - 7));

7天后

const endDate = new Date(new Date().setDate(new Date().getDate() + 7));
于 2021-06-01T23:47:14.550 回答
0

这是一个函数,它根据以下返回过去或将来的日期;

If plusMinus = -1 then Past Date
If plusMinus = 1 then Future Date

function getDate(inDays, plusMinus) {
    const today = new Date(); 
    return new Date(today.getFullYear(),
                    today.getMonth(),
                    today.getDate() + (inDays * plusMinus));
}
于 2018-08-31T19:43:09.593 回答
0

使用 dayjs 库,我们可以更轻松地完成它。

import dayjs from 'dayjs';

const getDate = (prevDays) => {
    const now = dayjs();
    console.log(now.subtract(prevDays, 'day').format('mm-dd-yyyy'));
    return now.subtract(prevDays, 'day').toDate();
}
于 2019-10-22T04:36:24.623 回答
0

这是最好的解决方案..当 X 是你的一天:

var dates = [];
for (let i = 0; i < X; i++) {
  var date = new Date();

  var thatDay = date.getDate() - i; //Current Date
  date.setDate(thatDay);
  let day = date.getDate();
  let month = date.getMonth() + 1;
  let year = date
    .getFullYear()
    .toString()
    .substr(-2);

  dates.push(month + '/' + day + '/' + year); //format it as you need
}
//output mm/d/yy
于 2020-04-16T16:13:35.443 回答
-1

谢谢您的帮助。我只是使用了一个简单的功能,效果很好

const subtractDayFromDate = (date, days) => {
  const newDate = new Date(date);
  newDate.setDate(newDate.getDate() - days);
  return newDate;
};

于 2021-08-06T10:02:48.720 回答