使用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); }
试试这个。
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);