有人知道一个简单的约会方式(例如今天)和回去X天吗?
因此,例如,如果我想在今天前5天计算日期。
答案 0 :(得分:766)
尝试这样的事情:
var d = new Date();
d.setDate(d.getDate()-5);
请注意,这会修改日期对象并返回更新日期的时间值。
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 5);
document.write('<br>5 days ago was: ' + d.toLocaleString());
答案 1 :(得分:61)
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
如果您在整个网络应用程序中执行大量日常操作, DateJS 将使您的生活更轻松:
答案 2 :(得分:47)
它是这样的:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
答案 3 :(得分:23)
我注意到getDays + X在日/月边界上没有工作。只要您的日期不是在1970年之前,就可以使用getTime。
var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
答案 4 :(得分:13)
获取moment.js。所有酷孩子都使用它。它有更多的格式选项,等等。
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
可选!转换为JS Date obj for Angular binding。
var date = new Date(dateMnsFive.toISOString());
可选!格式
var date = dateMnsFive.format("YYYY-MM-DD");
答案 5 :(得分:12)
我为Date创建了这个原型,这样我就可以传递负值来减去天数和正值来增加几天。
if(!Date.prototype.adjustDate){
Date.prototype.adjustDate = function(days){
var date;
days = days || 0;
if(days === 0){
date = new Date( this.getTime() );
} else if(days > 0) {
date = new Date( this.getTime() );
date.setDate(date.getDate() + days);
} else {
date = new Date(
this.getFullYear(),
this.getMonth(),
this.getDate() - Math.abs(days),
this.getHours(),
this.getMinutes(),
this.getSeconds(),
this.getMilliseconds()
);
}
this.setTime(date.getTime());
return this;
};
}
所以,要使用它我只能写:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
答案 6 :(得分:11)
我喜欢在几毫秒内完成数学运算。所以请使用Date.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
如果你喜欢它格式化
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
注意:Date.now()
在旧浏览器中不起作用(例如IE8)。 Polyfill here
为了扩展这一点,如果你想在一个时区中计算5天前的LOCAL日,那么上面的答案就会有白天的不准确之处,并且你有
Date.now()
现在给你当前的LOCAL,或.toString()
返回本地日期,因此与UTC中的Date.now()
基准日期不兼容。 但是,如果您使用UTC进行数学计算,则可以正常工作,例如
一个。您想要从5日前(UTC)
开始的UTC日期var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds UTC
new Date(newDate).toUTCString(); // or .toISOString(), BUT NOT toString
B中。您使用Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
答案 7 :(得分:9)
将日期拆分为多个部分,然后返回一个带有调整值的新日期
function DateAdd(date, type, amount){
var y = date.getFullYear(),
m = date.getMonth(),
d = date.getDate();
if(type === 'y'){
y += amount;
};
if(type === 'm'){
m += amount;
};
if(type === 'd'){
d += amount;
};
return new Date(y, m, d);
}
请记住,月份基于零,但日期不是。即新日期(2009,1,1)== 2009年2月1日,新日期(2009年,1,0)== 2009年1月31日;
答案 8 :(得分:9)
现有的一些解决方案很接近,但并不完全符合我的要求。此函数适用于正值或负值,并处理边界情况。
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
答案 9 :(得分:6)
我发现getDate()/ setDate()方法的一个问题是,它很容易将所有内容都转换为毫秒,而且语法有时很难让我遵循。
相反,我喜欢解决1天= 86,400,000毫秒的事实。
所以,对于你的特定问题:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
像魅力一样。
我一直使用这种方法进行滚动30/60/365天计算。
您可以轻松地推断这个以创建数月,数年等的时间单位。
答案 10 :(得分:3)
不使用第二个变量,你可以用你的后x天代替7 for:
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
答案 11 :(得分:3)
function addDays (date, daysToAdd) {
var _24HoursInMilliseconds = 86400000;
return new Date(date.getTime() + daysToAdd * _24HoursInMilliseconds);
};
var now = new Date();
var yesterday = addDays(now, - 1);
var tomorrow = addDays(now, 1);
答案 12 :(得分:2)
有些人建议使用 moment.js 在 js 中处理日期时使您的生活更轻松。自从这些答案以来已经过去了很长时间,值得注意的是,the authors of moment.js now discourage its use。主要是因为它的大小和缺乏摇树支持。
如果您想走图书馆路线,请使用 Luxon 之类的替代方案。它明显更小(因为它巧妙地使用了 Intl object 并支持摇树)并且与 moment.js 一样通用。
要从今天起回到 Luxon 的 5 天,您可以:
import { DateTime } from 'luxon'
DateTime.now().minus({ days: 5 });
答案 13 :(得分:2)
使用 MomentJS 。
id Rank Variable Total_Scores
1 34 3 a 11
4 126 4 d 18
6 190 4 f 10
7 388 3 g 20
9 401 3 i 15
11 476 3 y 11
12 476 4 z 11
13 536 3 p 15
Lines <- "id Rank Variable Total_Scores
34 3 a 11
34 4 b 6
126 3 c 15
126 4 d 18
190 3 e 9
190 4 f 10
388 3 g 20
388 4 h 15
401 3 i 15
401 4 x 11
476 3 y 11
476 4 z 11
536 3 p 15
536 4 q 6"
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)
答案 14 :(得分:1)
管理日期的简便方法是使用Moment.js
您可以使用add
。实施例
var startdate = "20.03.2014";
var new_date = moment(startdate, "DD.MM.YYYY");
new_date.add(5, 'days'); //Add 5 days to start date
alert(new_date);
答案 15 :(得分:1)
最佳答案导致我的代码中的错误,在本月的第一天,它将设置当月的未来日期。这是我做的,
curDate = new Date(); // Took current date as an example
prvDate = new Date(0); // Date set to epoch 0
prvDate.setUTCMilliseconds((curDate - (5 * 24 * 60 * 60 * 1000))); //Set epoch time
答案 16 :(得分:1)
对我来说,所有组合都可以正常使用以下代码snipplet, 该片段用于Angular-2实现, 如果你需要添加天数,则传递正数numberofDays,如果你需要减去传递负数numberofDays
function addSubstractDays(date: Date, numberofDays: number): Date {
let d = new Date(date);
return new Date(
d.getFullYear(),
d.getMonth(),
(d.getDate() + numberofDays)
);
}
答案 17 :(得分:1)
我的日程已经过时了.js:
d = new Date();
d.add(-10).days(); // subtract 10 days
尼斯!
网站包含这个美丽:
Datejs不只是解析字符串,而是将它们完全切成两个
答案 18 :(得分:1)
请参见以下代码,从当前日期中减去天数。另外,根据扣除的日期设置月份。
var today = new Date();
var substract_no_of_days = 25;
today.setTime(today.getTime() - substract_no_of_days* 24 * 60 * 60 * 1000);
var substracted_date = (today.getMonth()+1) + "/" +today.getDate() + "/" + today.getFullYear();
alert(substracted_date);
答案 19 :(得分:1)
如果您想要以人类可读的格式减去天数并格式化日期,则应考虑创建一个类似于此的自定义DateHelper
对象:
var DateHelper = {
addDays : function(aDate, numberOfDays) {
aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
return aDate; // Return the date
},
format : function format(date) {
return [
("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes
("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes
date.getFullYear() // Get full year
].join('/'); // Glue the pieces together
}
}
// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Subtract 5 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -5));
(另见this Fiddle)
答案 20 :(得分:1)
我创建了一个用于日期操作的函数。您可以添加或减去任何天数,小时数,分钟数。
function dateManipulation(date, days, hrs, mins, operator) {
date = new Date(date);
if (operator == "-") {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() - durationInMs);
} else {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() + durationInMs);
}
return newDate;
}
现在,通过传递参数来调用此函数。例如,这是一个函数调用,用于获取从今天起3天之前的日期。
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
答案 21 :(得分:0)
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 31);
document.write('<br>5 days ago was: ' + d.toLocaleString());
&#13;
答案 22 :(得分:0)
要计算具有比整日更精确差异的相对时间戳,您可以使用 Date.getTime() 和 Date.setTime() 来处理表示自某个时期(即 1 月 1 日)以来的毫秒数的整数, 1970 年。例如,如果您想知道现在是 17 小时后:
const msSinceEpoch = (new Date()).getTime();
const fortyEightHoursLater = new Date(msSinceEpoch + 48 * 60 * 60 * 1000).toLocaleString();
const fortyEightHoursEarlier = new Date(msSinceEpoch - 48 * 60 * 60 * 1000).toLocaleString();
const fiveDaysAgo = new Date(msSinceEpoch - 120 * 60 * 60 * 1000).toLocaleString();
console.log({msSinceEpoch, fortyEightHoursLater, fortyEightHoursEarlier, fiveDaysAgo})
答案 23 :(得分:0)
如果要全部放在一行上。
从今天起5天
//past
var thirtyDaysAgo = new Date(new Date().setDate(new Date().getDate() - 5));
//future
var thirtyDaysInTheFuture = new Date(new Date().setDate(new Date().getDate() + 5));
从特定日期开始5天
var pastDate = new Date('2019-12-12T00:00:00');
//past
var thirtyDaysAgo = new Date(new Date().setDate(pastDate.getDate() - 5));
//future
var thirtyDaysInTheFuture = new Date(new Date().setDate(pastDate.getDate() + 5));
我写了一个可以使用的函数。
function AddOrSubractDays(startingDate, number, add) {
if (add) {
return new Date(new Date().setDate(startingDate.getDate() + number));
} else {
return new Date(new Date().setDate(startingDate.getDate() - number));
}
}
console.log('Today : ' + new Date());
console.log('Future : ' + AddOrSubractDays(new Date(), 5, true));
console.log('Past : ' + AddOrSubractDays(new Date(), 5, false));
答案 24 :(得分:0)
我在玩耍,发现了一个简单的解决方案:
使用.setDate(+daysCount|-daysCount)
;符号=|-
是必须的;
let today = new Date();
today.setDate(-100);
console.log('date100DaysAgo', today);
today = new Date();
today.setDate(+100);
console.log('date100DaysAhead', today);
答案 25 :(得分:0)
这将为您提供最后10天的工作结果,即110%的工作状态,您将不会遇到任何问题
var date = new Date();
var day=date.getDate();
var month=date.getMonth() + 1;
var year=date.getFullYear();
var startDate=day+"/"+month+"/"+year;
var dayBeforeNineDays=moment().subtract(10, 'days').format('DD/MM/YYYY');
startDate=dayBeforeNineDays;
var endDate=day+"/"+month+"/"+year;
您可以根据自己的需要更改减去天数
答案 26 :(得分:0)
尝试这样的事情
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDate 可以是任何日期
限制可以是天数之差(未来为正,过去为负)
答案 27 :(得分:0)
看看如何使用momentjs查找今天前五天。
moment(Date.now() - 5 * 24 * 3600 * 1000).format('YYYY-MM-DD') // 2019-01-03
答案 28 :(得分:0)
var today = new Date();
var tmpDate = new Date();
var i = -3; var dateArray = [];
while( i < 4 ){
tmpDate = tmpDate.setDate(today.getDate() + i);
tmpDate = new Date( tmpDate );
var dateString = ( '0' + ( tmpDate.getMonth() + 1 ) ).slice(-2) + '-' + ( '0' + tmpDate.getDate()).slice(-2) + '-' + tmpDate.getFullYear();
dateArray.push( dateString );
i++;
}
console.log( dateArray );
答案 29 :(得分:0)
var date = new Date();
var day = date.getDate();
var mnth = date.getMonth() + 1;
var fDate = day + '/' + mnth + '/' + date.getFullYear();
document.write('Today is: ' + fDate);
var subDate = date.setDate(date.getDate() - 1);
var todate = new Date(subDate);
var today = todate.getDate();
var tomnth = todate.getMonth() + 1;
var endDate = today + '/' + tomnth + '/' + todate.getFullYear();
document.write('<br>1 days ago was: ' + endDate );
答案 30 :(得分:0)
我转换为毫秒并扣除了其他月份和年份的变化和逻辑
var numberOfDays = 10;//number of days need to deducted or added
var date = "01-01-2018"// date need to change
var dt = new Date(parseInt(date.substring(6), 10), // Year
parseInt(date.substring(3,5), 10) - 1, // Month (0-11)
parseInt(date.substring(0,2), 10));
var new_dt = dt.setMilliseconds(dt.getMilliseconds() - numberOfDays*24*60*60*1000);
new_dt = new Date(new_dt);
var changed_date = new_dt.getDate()+"-"+(new_dt.getMonth()+1)+"-"+new_dt.getFullYear();
希望帮助
答案 31 :(得分:0)
设置日期时,日期转换为毫秒,因此您需要将其转换回日期:
这种方法也考虑到了新年的变化等。
function addDays( date, days ) {
var dateInMs = date.setDate(date.getDate() - days);
return new Date(dateInMs);
}
var date_from = new Date();
var date_to = addDays( new Date(), parseInt(days) );
答案 32 :(得分:0)
您可以使用Javascript。
var CurrDate = new Date(); // Current Date
var numberOfDays = 5;
var days = CurrDate.setDate(CurrDate.getDate() + numberOfDays);
alert(days); // It will print 5 days before today
对于PHP,
$date = date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today.
echo $date;
希望它会对你有所帮助。
答案 33 :(得分:0)
我喜欢以下因为它是一行。 DST更改并不完美,但通常足以满足我的需求。
var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5));
答案 34 :(得分:-1)
答案太多了,这个问题可以通过将一些已经高度评价的答案结合起来的一线解决。
从当前日期中减去5天* 24小时* 60分钟* 60秒* 1000毫秒,然后从该值创建新日期。
const fiveDaysAgo = new Date(new Date() - 5*24*60*60*1000)
答案 35 :(得分:-2)
var daysToSubtract = 3;
$.datepicker.formatDate('yy/mm/dd', new Date() - daysToSubtract) ;
答案 36 :(得分:-4)
var my date = new Date().toISOString().substring(0, 10);
它只能给你2014-06-20这样的日期。 希望能有所帮助