我正在尝试使用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
答案 0 :(得分:21)
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()
);
答案 1 :(得分:5)
我想鼓励您使用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.
}
答案 2 :(得分:5)
假设 numberOfDaysToAdd 是一个数字:
joindate.setDate(joindate.getDate() + numberOfDaysToAdd);
答案 3 :(得分:4)
第一个警告是该字段的值。第二个是非美国格式化日期生成的日期。
如果您想保留代码,则需要更改
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);
如果月份是<最后你想要加0 10
if (mm<10) mm="0"+mm;
如果您正在使用jQuery UI中的日期选择器,那么您可以
$('.new').val($("#DatePicker").datepicker( "setDate" , +1 ).val());
而不是你的功能
http://jqueryui.com/demos/datepicker/#method-setDate
设置的当前日期 日期选择器。新日期可能是日期 对象或当前日期的字符串 格式(例如'01 / 26/2009'),一个数字 从今天起的几天(例如+7)或a 值和周期的字符串('y'表示 几年,'m','w'几周, 'd'几天,例如'+ 1m + 7d')或null 清除所选日期。
答案 4 :(得分:3)
尝试
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。
答案 5 :(得分:2)
要回答您的真实问题,我认为您的问题是您正在尝试解析DatePicker的文本值,而不是您的语言环境的格式正确。
使用:
而不是.val()
var joindate = $('#DatePicker').datepicker("getDate");
直接从jQuery获取表示所选日期的underyling Date()
对象。
无论DatePicker
或当前区域设置中指定的日期格式如何,都可以保证日期对象正确无误。
然后使用:
joindate.setDate(joindate.getDate() + numberOfDaysToAdd);
将其移动。
答案 6 :(得分:1)
这是一个错字圆形的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);
答案 7 :(得分:1)
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);
答案 8 :(得分:0)
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);
}
答案 9 :(得分:-1)
试试这个。
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);
}
答案 10 :(得分:-1)
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);