使用javascript添加天数

我想使用javascript将日期添加到给定日期。 我有以下代码

function onChange(e) { var datepicker = $("#DatePicker").val(); alert(datepicker); var joindate = new Date(datepicker); alert(joindate); var numberOfDaysToAdd = 1; joindate.setDate(joindate + numberOfDaysToAdd); var dd = joindate.getDate(); var mm = joindate.getMonth() + 1; var y = joindate.getFullYear(); var joinFormattedDate = dd + '/' + mm + '/' + y; $('.new').val(joinFormattedDate); } 

在第一个警报我得到日期24/06/2011但在第二个警报我得到Thu Dec 06 2012 00:00:00 GMT+0500 (Pakistan Standard Time)这是错误的我希望它保持24/06/2011所以我可以添加几天。 在我的代码中,我希望我的最终输出为25/06/2011

小提琴是@ http://jsfiddle.net/tassadaque/rEe4v/

Date('string')将尝试将字符串解析为m/d/yyyy 。 字符串24/06/2011因此成为Dec 6, 2012 。 原因:24个被视为一个月… 1 => 2011年1月,13 => 2012年1月因此24 => 2012年12月。我希望您理解我的意思。 所以:

 var dmy = "24/06/2011".split("/"); // "24/06/2011" should be pulled from $("#DatePicker").val() instead var joindate = new Date( parseInt(dmy[2], 10), parseInt(dmy[1], 10) - 1, parseInt(dmy[0], 10) ); alert(joindate); // Fri Jun 24 2011 00:00:00 GMT+0500 (West Asia Standard Time) joindate.setDate(joindate.getDate() + 1); // substitute 1 with actual number of days to add alert(joindate); // Sat Jun 25 2011 00:00:00 GMT+0500 (West Asia Standard Time) alert( ("0" + joindate.getDate()).slice(-2) + "/" + ("0" + (joindate.getMonth() + 1)).slice(-2) + "/" + joindate.getFullYear() ); 

在这里演示

我想鼓励您使用DateJS库。 真的太棒了!

 function onChange(e) { var date = Date.parse($("#DatePicker").val()); //You might want to tweak this to as per your needs. var new_date = date.add(n).days(); $('.new').val(new_date.toString('M/d/yyyy'); //You might want to tweak this as per your needs as well. } 

假设numberOfDaysToAdd是一个数字:

 joindate.setDate(joindate.getDate() + numberOfDaysToAdd); 

第一个警报是该字段的值。 第二个是非美国格式化日期生成的日期。

这是一个有效的例子

(似乎这种标记是必要的,以引起注意)

如果你想保留你的代码,那么你需要改变

var joindate = new Date(datepicker);

 var parms = datepicker.split("/"); 

然后用

 var joindate = new Date(parms[1]+"/"+parms[0]+"/"+parms[2]); 

或者同样的工作

 var joindate = new Date(parms[2],parms[1]-1,parms[0]); 

正如其他一些答案中所指出的那样,使用.getDate()

 joindate.setDate(joindate.getDate() + numberOfDaysToAdd); 

最后,如果月份<10,则要添加0

 if (mm<10) mm="0"+mm; 

如果您正在使用jQuery UI中的datepicker,那么您可以这样做

$('.new').val($("#DatePicker").datepicker( "setDate" , +1 ).val());

而不是你的function

http://jqueryui.com/demos/datepicker/#method-setDate

设置datepicker的当前日期。 新日期可以是Date对象或当前日期格式的字符串(例如'01 / 26/2009'),从今天起的天数(例如+7)或一串值和句点('y'表示年,'m'持续数月,'w'持续数周,'d'持续数天,例如'+ 1m + 7d'),或null以清除所选日期。

尝试

 function onChange(e) { var datepicker = $("#DatePicker").val(); alert(datepicker); var parts = datepicker.split(/[^\d]/); var joindate = new Date(); joindate.setFullYear(parts[2], parts[1]-1, parts[0]); alert(joindate); var numberOfDaysToAdd = 1; joindate.setDate(joindate + numberOfDaysToAdd); var dd = joindate.getDate(); var mm = joindate.getMonth() + 1; var y = joindate.getFullYear(); var joinFormattedDate = dd + '/' + mm + '/' + y; $('.new').val(joinFormattedDate); } 

我想问题是JavaScript传递给Date构造函数时期望格式MM / DD / YYYY不是DD / MM / YYYY。

为了回答您的真实问题,我认为您的问题是您正在尝试解析DatePicker的文本值,当时它的格式不适合您的语言环境。

而不是.val() ,使用:

 var joindate = $('#DatePicker').datepicker("getDate"); 

直接从jQuery获取表示所选日期的underyling Date()对象。

无论DatePicker或当前语言环境中指定的日期格式如何,这都可以保证日期对象的正确性。

然后使用:

 joindate.setDate(joindate.getDate() + numberOfDaysToAdd); 

移动它。

这是一个错字圆形的joindate.setDate(joindate + numberOfDaysToAdd)?

我试过这段代码,对我来说似乎没问题

  var joindate = new Date(2010, 5, 24); alert(joindate); var numberOfDaysToAdd = 1; joindate.setDate(joindate.getDate() + numberOfDaysToAdd); var dd = joindate.getDate(); var mm = joindate.getMonth() + 1; var y = joindate.getFullYear(); var joinFormattedDate = dd + '/' + mm + '/' + y; alert(joinFormattedDate); 
 Date.prototype.addDays = function(days) { this.setDate(this.getDate() + days); return this; }; 

并在你的javascript代码中,你可以打电话

 var currentDate = new Date(); // to add 8 days to current date currentDate.addDays(8); 
 function onChange(e) { var datepicker = $("#DatePicker").val().split("/"); var joindate = new Date(); var numberOfDaysToAdd = 1; joindate.setFullYear(parseInt(datepicker[2]), parseInt(datepicker[1])-1, parseInt(datepicker[0])+numberOfDaysToAdd); $('.new').val(joindate); } 

http://jsfiddle.net/roberkules/k4GM5/

试试这个。

 Date.prototype.addDay = function(numberOfDaysToAdd){ this.setTime(this.getTime() + (numberOfDaysToAdd * 86400000)); }; function onChange(e) { var date = new Date(Date.parse($("#DatePicker").val())); date.addDay(1); var dd = date.getDate(); var mm = date.getMonth() + 1; var y = date.getFullYear(); var joinFormattedDate = dd + '/' + mm + '/' + y; $('.new').val(joinFormattedDate); } 
 var day = 24*60*60*1000; // One day = 24 hours * 60 min * 60 sec * 1000 mili sec var numOfDays = 5 * day; var numOfDaysLaterDate = new Date((new Date()).valueOf() + numOfDays);