Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中添加一天截止日期_Javascript_Date - Fatal编程技术网

在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();