我确信很多人都会问这个问题,但当我检查答案时,在我看来,我找到的是错误的
var startDate = new Date(Date.parse(startdate));
//The start date is right lets say it is 'Mon Jun 30 2014 00:00:00'
var endDate = new Date(startDate.getDate() + 1);
// the enddate in the console will be 'Wed Dec 31 1969 18:00:00' and that's wrong it should be 1 july
我知道.getDate()
从1-31返回但是浏览器或javascript只增加了一天没有更新月份和年份吗?
在这种情况下,我应该编写一个算法来处理这个问题吗?或者还有另一种方式?
答案 0 :(得分:48)
请注意,Date.getDate
仅返回该月的某一天。您可以通过拨打Date.setDate
并附加1来添加一天。
// Create new Date instance
var date = new Date()
// Add a day
date.setDate(date.getDate() + 1)
JavaScript会自动为您更新月份和年份。
修改强>
这是指向页面的链接,您可以在其中找到有关内置Date对象的所有精彩内容,并查看可能的内容:Date。
答案 1 :(得分:12)
带有单个数字的Date
构造函数预计自 1969年12月31日以来的毫秒数。
Date.getDate()
返回当前日期对象的日期索引。在您的示例中,日期为30
。最终表达式为31
,因此它在 1969年12月31日之后返回31毫秒。
使用现有方法的简单解决方案是使用Date.getTime()
代替。然后,添加一天毫秒而不是1
。
例如,
var dateString = 'Mon Jun 30 2014 00:00:00';
var startDate = new Date(dateString);
// seconds * minutes * hours * milliseconds = 1 day
var day = 60 * 60 * 24 * 1000;
var endDate = new Date(startDate.getTime() + day);
<强> JSFiddle 强>
请注意,此解决方案无法处理与夏令时,闰年等相关的边缘情况。相反,使用像moment.js这样的成熟开源库来处理所有内容时,它总是一种更具成本效益的方法。
答案 2 :(得分:1)
我认为你在寻找的是:
startDate.setDate(startDate.getDate() + 1);
另外,您可以查看Moment.js
用于解析,验证,操作和格式化日期的javascript日期库。
答案 3 :(得分:1)
2月31日和28日有问题getDate()
我使用此功能getTime
和24*60*60*1000 = 86400000
var dateWith31 = new Date("2017-08-31");
var dateWith29 = new Date("2016-02-29");
var amountToIncreaseWith = 1; //Edit this number to required input
console.log(incrementDate(dateWith31,amountToIncreaseWith));
console.log(incrementDate(dateWith29,amountToIncreaseWith));
function incrementDate(dateInput,increment) {
var dateFormatTotime = new Date(dateInput);
var increasedDate = new Date(dateFormatTotime.getTime() +(increment *86400000));
return increasedDate;
}
答案 4 :(得分:1)
var datatoday = new Date();
var datatodays = datatoday.setDate(new Date(datatoday).getDate() + 1);
todate = new Date(datatodays);
console.log(todate);
这会对你有帮助......
答案 5 :(得分:0)
如果你不介意使用图书馆,DateJS(https://github.com/abritinthebay/datejs/)会让这很容易。然而,使用vanilla JavaScript的答案之一可能会更好,除非您将利用其他一些DateJS功能,例如解析异常格式的日期。
如果您正在使用DateJS,那么这样的一行应该可以解决问题:
Date.parse(startdate).add(1).days();
您也可以使用具有相似功能的MomentJS(http://momentjs.com/),但我并不熟悉它。
答案 6 :(得分:0)
使用此我觉得它对你有用
var endDate=startDate.setDate(startDate.getDate() + 1);
答案 7 :(得分:0)
只是为了向Date
原型添加函数:
以可变的方式/风格:
Date.prototype.addDays = function(n) {
this.setDate(this.getDate() + n);
};
// Can call it tomorrow if you want
Date.prototype.nextDay = function() {
this.addDays(1);
};
Date.prototype.addMonths = function(n) {
this.setMonth(this.getMonth() + n);
};
Date.prototype.addYears = function(n) {
this.setFullYear(this.getFullYear() + n);
}
// etc...
var currentDate = new Date();
currentDate.nextDay();