在javascript中添加一天截止日期
我相信很多人都问过这个问题,但当我检查答案时,我发现他们错了在javascript中添加一天截止日期,javascript,date,Javascript,Date,我相信很多人都问过这个问题,但当我检查答案时,我发现他们错了 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 19
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是否只增加了一天而不更新月份和年份
在这种情况下,我应该写一个算法来处理这个问题吗?或者还有另一种方法?请注意,
Date.getDate
只返回当月的日期。您可以通过调用Date.setDate
并附加1来添加一天
// Create new Date instance
var date = new Date()
// Add a day
date.setDate(date.getDate() + 1)
JavaScript将自动为您更新月份和年份
编辑:这里有一个链接,指向一个页面,您可以在其中找到有关内置日期对象的所有精彩内容,并查看可能的内容:。我想您要查找的是:
startDate.setDate(startDate.getDate() + 1);
另外,你可以看看
用于解析、验证、操作和格式化日期的javascript日期库
如果您不介意使用库,DateJS()将使这相当容易。不过,如果您不打算利用DateJS的一些其他功能,比如解析格式异常的日期,那么最好使用vanilla JavaScript作为答案之一 如果您使用的是DateJS,那么这样的一行应该可以做到:
Date.parse(startdate).add(1).days();
您也可以使用MomentJS,它具有类似的功能(),但是我不太熟悉。使用这个,我认为它对您很有用
var endDate=startDate.setDate(startDate.getDate() + 1);
采用单个数字的
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);
请注意,此解决方案不处理与夏令时、闰年等相关的边缘案例。相反,它始终是一种更具成本效益的方法,可以使用一个成熟的开源库(如moment.js)来处理所有问题。2月31日和28日发布了
getDate()
我使用这个函数getTime
和24*60*60*1000=86400000
var dateWith31=新日期(“2017-08-31”);
var dateWith29=新日期(“2016-02-29”);
var amountToIncreaseWith=1//将此数字编辑为所需输入
log(递增日期(dateWith31,amountToIncreaseWith));
log(递增日期(dateWith29,amountToIncreaseWith));
函数incrementDate(日期输入,增量){
var dateFormatTotime=新日期(dateInput);
var incremasedDate=新日期(dateFormatTotime.getTime()+(增量*86400000));
返回增量数据;
}
这将帮助您……仅仅是为了向
日期添加功能
原型:
以可变的方式/风格:
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();
你实际上是在做
enddate=newdate(30+1)
->newdate(31)
。JS究竟应该如何知道31是什么?getDate()
只返回一个月的哪一天。它不返回任何月/年。请阅读问题,我改进它现在只是一个函数调用与不同的一天。总是欢迎@ G.F.这个解决方案不考虑“节省时间”的变化,当一天可能会发生一个小时更长或更短。你是正确的。我将在我的回答中添加一个说明,说明这一点,但目前最好的解决方案是,当存在像矩.js这样的轻量级库时,不要扮演自己的角色,以避免出现这些边缘情况。这是一种用两行处理一般情况的方法。谢谢。。。这对我帮助很大。有时这似乎只增加了23个小时。有什么原因可能会发生吗?啊哈,从标准时间到夏时制的变化只增加了23个小时。太糟糕了,除了月份和年份之外,它没有更新小时数。我将尝试强制UTC(似乎默认为区域设置时区?)。您只是忘记了返回
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();