Subtract days from a date in JavaScript
有人知道一个简单的约会方式(比如今天)和回到X天吗?
例如,如果我想计算今天之前5天的日期。
尝试如下操作:
1 2 | var d = new Date(); d.setDate(d.getDate()-5); |
请注意,这将修改日期对象并返回更新日期的时间值。
1 2 3 4 5 6 7 | var d = new Date(); document.write('Today is: ' + d.toLocaleString()); d.setDate(d.getDate() - 5); document.write('5 days ago was: ' + d.toLocaleString()); |
号
1 2 3 | var dateOffset = (24*60*60*1000) * 5; //5 days var myDate = new Date(); myDate.setTime(myDate.getTime() - dateOffset); |
。
如果您在整个Web应用程序中执行大量令人头痛的日期操作,那么datejs将使您的生活更加轻松:
网址:http://simonwillison.net/2007/dec/3/datejs/
就像这样:
1 2 3 | var d = new Date(); // today! var x = 5; // go back 5 days! d.setDate(d.getDate() - x); |
我注意到getdays+x不能跨越天/月边界。只要约会日期不早于1970年,使用gettime就有效。
1 2 | var todayDate = new Date(), weekDate = new Date(); weekDate.setTime(todayDate.getTime()-(7*24*3600000)); |
。
获取moment.js。所有的酷孩子都用它。它有更多的格式选项等。
1 2 | var n = 5; var dateMnsFive = moment(<your date>).subtract(n , 'day'); |
号
可选!转换为JS日期对象进行角度绑定。
1 | var date = new Date(dateMnsFive.toISOString()); |
号
可选!格式
1 | var date = dateMnsFive.format("YYYY-MM-DD"); |
号
我制作了这个日期原型,这样我就可以通过负值减去天数,通过正值添加天数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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; }; } |
。
所以,要使用它,我可以简单地写:
1 2 | var date_subtract = new Date().adjustDate(-4), date_add = new Date().adjustDate(4); |
。
我喜欢用毫秒来做数学。所以使用EDOCX1[0]
1 | var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds |
。
如果你喜欢它的格式
1 | new Date(newDate).toString(); // or .toUTCString or .toISOString ... |
号
注:
@袜子对指出了我的马虎。正如S/H所说,"一年中的某一天有23个小时,而由于时区规则,有25个小时。"
为了进一步说明这一点,如果您想在一个有daylightsaving更改的时区中计算5天前的本地日,上面的答案将有daylightsaving错误,并且您
- 假设(错误地)
Date.now() 给你当前本地时间,或 - 使用返回本地日期的
.toString() ,因此与UTC中的Date.now() 基准日期不兼容。
但是,如果你的数学都是用UTC计算的,它是有效的,例如
a.您希望5天前的UTC日期(UTC)
1 2 | 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.从UTC基准日期开始,而不是"现在",使用
1 2 | newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000; new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString |
号
将日期拆分为多个部分,然后返回带有调整值的新日期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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日;
现有的一些解决方案很接近,但并不完全符合我的要求。此函数同时处理正值和负值,并处理边界情况。
1 2 3 4 5 6 7 8 9 10 11 | function addDays(date, days) { return new Date( date.getFullYear(), date.getMonth(), date.getDate() + days, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds() ); } |
号
我发现getdate()/setdate()方法的一个问题是,它太容易将所有内容转换为毫秒,而且有时语法对我来说很难理解。
相反,我喜欢把1天=86400000毫秒这个事实处理掉。
因此,对于您的特定问题:
1 2 3 | today = new Date() days = 86400000 //number of milliseconds in a day fiveDaysAgo = new Date(today - (5*days)) |
很有魅力。
我一直使用这种方法进行30/60/365天的滚动计算。
您可以很容易地推断这一点,以创建月份、年份等的时间单位。
不使用第二个变量,您可以将7替换为您的back x days:
1 | let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000)) |
号
1 2 3 4 5 6 7 8 9 10 | 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); |
Use MomentJS.
号
1 2 3 4 5 6 7 8 | function getXDaysBeforeDate(referenceDate, x) { return moment(referenceDate).subtract(x , 'day').format('MMMM Do YYYY, h:mm:ss a'); } var yourDate = new Date(); // let's say today var valueOfX = 7; // let's say 7 days before console.log(getXDaysBeforeDate(yourDate, valueOfX)); |
。
1 | <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"> |
对我来说,所有的组合都很好地与下面的代码截图一起工作,代码片段用于Angular-2实现,如果需要添加天数,则传递正数,如果需要减除,则传递负数
1 2 3 4 5 6 7 8 | function addSubstractDays(date: Date, numberofDays: number): Date { let d = new Date(date); return new Date( d.getFullYear(), d.getMonth(), (d.getDate() + numberofDays) ); } |
最重要的答案导致了我的代码中的一个错误,在这个月的第一天,它将在当前月份中设置一个未来的日期。这就是我所做的,
1 2 3 | 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 |
。
管理日期的一个简单方法是使用moment.js
您可以使用
1 2 3 4 | 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); |
号
文档http://momentjs.com/docs//operating/add/
我已经为日期操作创建了一个函数。你可以加或减任何天数,小时,分钟。
1 2 3 4 5 6 7 8 9 10 11 | 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天之前获取日期。
1 2 | var today = new Date(); var newDate = dateManipulation(today, 3, 0, 0,"-"); |
我已经过时了。js:
网址:http://www.datejs.com/
1 2 | d = new Date(); d.add(-10).days(); // subtract 10 days |
好极了!
网站包括这个美丽:
Datejs doesn’t just parse strings, it slices them cleanly in two
号
如果要同时减去天数并将日期格式化为人类可读的格式,则应考虑创建一个自定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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)); |
(另见此小提琴)
请参见以下代码,从当前日期中减去天数。另外,根据减去的日期设置月份。
1 2 3 4 5 6 7 | 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); |
号
这将给你最后10天的结果110%的工作你不会得到任何类型的问题
1 2 3 4 5 6 7 8 | 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; |
号
您可以根据需要更改减法天数
试试这个
1 2 3 4 | dateLimit = (curDate, limit) => { offset = curDate.getDate() + limit return new Date( curDate.setDate( offset) ) } |
号
currdate可以是任何日期
限制可以是天数的差异(未来为正,过去为负)
看看你怎么能找到今天约会前5天的妈妈。
1 | moment(Date.now() - 5 * 24 * 3600 * 1000).format('YYYY-MM-DD') // 2019-01-03 |
。
使用现代javascript函数语法
1 2 3 | const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore)); console.log(getDaysPastDate(1)); // yesterday |
1 2 3 4 5 6 7 8 9 10 11 | 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 ); |
。
1 2 3 4 5 6 7 8 9 10 11 12 | 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('1 days ago was: ' + endDate ); |
。
设置日期时,日期转换为毫秒,因此需要将其转换回日期:
这种方法也考虑到了新年的变化等。
1 2 3 4 5 6 7 | 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) ); |
号
您可以使用javascript。
1 2 3 4 | 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,
1 2 | $date = date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today. echo $date; |
希望它能帮助你。
我把时间转换成毫秒,扣除了其他日子,年复一年都不会改变,这是合乎逻辑的。
1 2 3 4 5 6 7 8 | 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(); |
号
希望有帮助
我喜欢以下内容,因为它是一行。DST变更不完美,但通常足以满足我的需求。
1 | var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5)); |
1 2 3 4 5 6 7 | var d = new Date(); document.write('Today is: ' + d.toLocaleString()); d.setDate(d.getDate() - 31); document.write('5 days ago was: ' + d.toLocaleString()); |
号
1 2 | var daysToSubtract = 3; $.datepicker.formatDate('yy/mm/dd', new Date() - daysToSubtract) ; |
1 | var my date = new Date().toISOString().substring(0, 10); |
它只能给你2014-06-20这样的日期。希望会有所帮助