Answers:
您可以使用以下方法创建一个:
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
var date = new Date();
alert(date.addDays(5));
这样可以在必要时自动增加月份。例如:
8/31 +1天将变成9/1。
setDate
直接使用的问题是它是一个变种器,最好避免这种事情。ECMA认为适合Date
作为可变类而不是不变结构。
864E5
由于某些原因,我更喜欢24*60*60
用我的代码写:)
正确答案:
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
错误答案:
该答案有时会提供正确的结果,但通常会返回错误的年份和月份。该答案唯一有效的时间是您要添加日期的日期恰好具有当前年份和月份。
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
证明/示例
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
注意,因为这可能很棘手。设置“明天”时,它仅起作用,因为其当前值与“今天”的年和月相匹配。但是,将日期设置为“ 32”通常仍可以将其移至下个月。
var d = new Date(); d.setDate( d.getDate() + 1 );
?
getDate()
返回该年的日期。然后,称setDate
套在当天当年。因此,这不是一个好的通用解决方案。@AnthonyWJones的答案实际上是正确的。
var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)
给定2017年1月3日,为期2年。
我的简单解决方案是:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
此解决方案不存在夏令时的问题。此外,您可以添加/扣除年份,月份,天数等的任何偏移量。
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
是正确的代码。
setDate
。
这些答案让我感到困惑,我更喜欢:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime()自1970年以来为我们提供毫秒,并且86400000是一天中的毫秒数。因此,ms包含所需日期的毫秒数。
使用毫秒构造函数可提供所需的日期对象。
new Date(new Date('11/4/2012').getTime() + 86400000)
尝试
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
使用setDate()添加日期不会解决您的问题,请尝试在2月增加几天,如果尝试向其添加新日期,则不会达到预期的效果。
遵循下面的示例,花了很长时间才试图弄清当年未达成的交易。
如果您只想简单地将n天添加到您拥有的日期,那么最好去:
myDate.setDate(myDate.getDate()+ n);
或长期版本
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
今天/明天的事情令人困惑。通过将当前日期设置为新的日期变量,您会弄乱年份值。如果您从原始日期开始工作,则不会。
如果可以,请使用moment.js。JavaScript没有很好的本机日期/时间方法。以下是Moment语法的示例:
var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
var days = 2;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);
我昨晚创建了这些扩展程序:
您可以传递正值或负值;
例:
var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);
Date.prototype.addDays = function (num) {
var value = this.valueOf();
value += 86400000 * num;
return new Date(value);
}
Date.prototype.addSeconds = function (num) {
var value = this.valueOf();
value += 1000 * num;
return new Date(value);
}
Date.prototype.addMinutes = function (num) {
var value = this.valueOf();
value += 60000 * num;
return new Date(value);
}
Date.prototype.addHours = function (num) {
var value = this.valueOf();
value += 3600000 * num;
return new Date(value);
}
Date.prototype.addMonths = function (num) {
var value = new Date(this.valueOf());
var mo = this.getMonth();
var yr = this.getYear();
mo = (mo + num) % 12;
if (0 > mo) {
yr += (this.getMonth() + num - mo - 12) / 12;
mo += 12;
}
else
yr += ((this.getMonth() + num - mo) / 12);
value.setMonth(mo);
value.setYear(yr);
return value;
}
无需使用第二个变量,您可以将x替换为接下来的x天:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
最简单的解决方案。
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + parseInt(days));
return this;
};
// and then call
var newDate = new Date().addDays(2); //+2 days
console.log(newDate);
// or
var newDate1 = new Date().addDays(-2); //-2 days
console.log(newDate1);
感谢Jason的回答能按预期工作,这是您的代码和AnthonyWJones方便的格式的结合:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
晚会晚了,但是如果您使用的有个很棒的插件叫做Moment:jQuery
话,那么
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
还有很多其他好东西!
编辑:jQuery参考删除由于aikeru的评论
我知道老了,但有时候我喜欢这样:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
提出的解决方案在夏令时方面存在问题。
通过使用getUTCDate
/ setUTCDate
,我解决了我的问题。
// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
// Make a working copy so we don't mutate the supplied date.
const d = new Date(date);
d.setUTCDate(d.getUTCDate() + num);
return d;
}
您可以使用JavaScript,不需要jQuery:
var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd);
Formatting to dd/mm/yyyy :
var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();
var someFormattedDate = dd + '/'+ mm + '/'+ y;
setDate()的Mozilla文档未指示它将处理月末情况。参见https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
设置日期()
这就是为什么我需要添加天数时使用setTime()的原因。
我想我也会给出一个答案:就
个人而言,我喜欢避免不必要的变量声明,方法调用和构造函数调用,因为它们在性能上都很昂贵。(当然,在合理的范围内)
我打算将其保留为@AnthonyWJones给出的答案下的评论,但考虑得更好。
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setTime( 864E5 * days + this.valueOf() ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
以上将尊重DST。这意味着,如果您添加了超过DST的天数,则显示的时间(小时)将发生变化以反映这一点。
范例:
2014年11月2日02:00是夏令时结束。
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 09:30:00
如果您希望保留DST的时间(因此10:30仍然是10:30)...
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setDate( this.getDate() + days ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
所以,现在你有...
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 10:30:00
不,javascript没有内置函数,但是您可以使用简单的代码行
timeObject.setDate(timeObject.getDate() + countOfDays);
我用类似的东西:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
可以节省时间:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
适用于新年:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
可以参数化:
function DateAdd(source, amount, step) {
var factor = 1;
if (step == "day") factor = 24 * 60 * 60 * 1000;
else if (step == "hour") factor = 60 * 60 * 1000;
...
new Date(source.getTime() + amount * factor);
}
我正在使用以下解决方案。
var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);
Date具有一个接受int的构造函数。此参数表示1970年1月1日之前/之后的总毫秒数。它还具有setTime方法,该方法无需创建新的Date对象即可执行相同的操作。
我们在这里所做的是将天数转换为毫秒,并将此值添加到getTime提供的值中。最后,将结果提供给Date(milliseconds)构造函数或setTime(milliseconds)方法。
now.setDate(now.getDate() + days);
自动处理DST更改。而且我必须纠正,leap秒在JS时间戳中被忽略了。
编辑:
代替setTime()
(或setHours()
),您可以这样做:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
旧:
除了使用,setTime()
您可以使用setHours()
:
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
参见JSFiddle ...
d.setDate(d.getDate() + 1);
非常简单的代码,可以在Java脚本中添加日期。
var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);
有一个setDate和getDate方法,使您可以执行以下操作:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
如果您要减去天数并以易于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. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));
(另请参阅此小提琴)
用javascript扩展原型可能不是一个好主意,尤其是在专业代码库中。
您想要做的是扩展本机Date
类:
class MyCustomDate extends Date {
addDays(days) {
const date = new MyCustomDate(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
}
const today = new MyCustomDate();
const nextWeek = today.addDays(7)
console.log(nextWeek)
这样,如果有一天Javascript实现了本机addDays
方法,您将不会破坏任何东西。
Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};