使用Javascript添加日期
我正在尝试使用Javascript向给定日期添加天数。我有以下代码:使用Javascript添加日期,javascript,jquery,date,jquery-events,Javascript,Jquery,Date,Jquery Events,我正在尝试使用Javascript向给定日期添加天数。我有以下代码: function onChange(e) { var datepicker = $("#DatePicker").val(); alert(datepicker); var joindate = new Date(datepicker); alert(joindate); var numberOfDaysToAdd = 1; joindate.setDate(
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);
}
在第一次警报中,我得到日期2011年6月24日
,但在第二次警报中,我得到日期2012年12月6日星期四00:00:00 GMT+0500(巴基斯坦标准时间)
,这是错误的,我希望它保持在2011年6月24日
,以便我可以为其添加天数。在我的代码中,我希望我的最终输出是25/06/2011
Fiddle是@是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);
试一试
我想问题是JavaScript在传递到日期构造函数时需要的是MM/DD/YYYY格式,而不是DD/MM/YYYY格式。要回答您真正的问题,我认为您的问题是,您试图解析日期选择器的文本值,而该值的格式不适合您的区域设置 使用以下命令代替
.val()
:
var joindate = $('#DatePicker').datepicker("getDate");
直接从jQuery获取表示所选日期的underylingDate()
对象
这保证了日期对象是正确的,而与日期选择器中指定的日期格式或当前区域设置无关
然后使用:
joindate.setDate(joindate.getDate() + numberOfDaysToAdd);
要移动它。第一个警报是该字段的值。第二个是从非美国格式的日期生成的日期
(似乎这种标记是引起注意的必要条件)
如果你想保留你的代码,那么你需要改变
var joindate=新日期(日期选择器)代码>
到
然后使用
var joindate = new Date(parms[1]+"/"+parms[0]+"/"+parms[2]);
或者相同的工作状态
var joindate = new Date(parms[2],parms[1]-1,parms[0]);
正如其他几个答案中所指出的,使用.getDate()
最后,如果月份小于10,则要添加0
if (mm<10) mm="0"+mm;
if(毫米)
我想鼓励你们使用图书馆。它真的很棒
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);
Date('string')
将尝试将字符串解析为m/d/yyyy
。字符串24/06/2011
因此成为2012年12月6日
。原因:24被视为一个月…1=>2011年1月,13=>2012年1月,因此是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()
);
在javascript代码中,您可以调用
var currentDate = new Date();
// to add 8 days to current date
currentDate.addDays(8);
试试这个
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);
}
@mplungjan aDate()
对象在内部距离历元只有一毫秒的偏移量。它怎么可能“不正确”?如果您使用非美国格式的日期(例如dd/mm/yyyy)构造日期,并且希望它是正确的,那么日期就不正确。您已经更改了答案,以便更容易理解。文档建议。datepicker(“设置日期”、+1)@mplungjan这将更改日期选择器中当前显示的内容,但是您仍然必须使用getDate
来检索该值。当然,如果您只想添加一天,那么根本不需要getDate。当我向joinFormattedDate发出警报时,我也会想到同样的情况,它会给我NaN/NaN为什么要使用两个语句来设置日期?var joindate=new Date(parts[2],parts[1]-1,parts[0]);将比重载setFullYear更有效。您还缺少joindate.getDate()+日期应该是m/d/yyyy,否则你会得到意想不到的结果。请参阅我的答案进行解释。还有我的,还有gedrox'和Alnitak的。在你之前都指出了这一点…@mplungjan和我的是唯一一个真正使用日期选择器本身返回正确的date
对象的人…请参阅我对你答案的评论。我觉得这很有趣@Tassadaque发布的操作可以替换为$('.new').val($(“#DatePicker”).DatePicker(“setDate”),+1”);
@mplungjan no,因为.DatePicker(“setDate”)
不返回值。难以置信的杀伤力过大。特别是如果日期选择器可以完成这项工作的话itself@mplungjan可能,虽然这是主观的,但在任何合理的应用程序中,不管日期操作是如何给定的,像DateJS这样的东西可以帮助您获得非常整洁和简单的代码,我认为它绝对值得它带来的小空间它。今天你只想增加几天,明天你可能想做更多。实际上,我的日期选择器的值是“26/06/2011”,而不是“06/24/2011”"这是根本原因,我想如果我改变你的小提琴,它会显示invaliddate,当我运行它时,它会给我错误的日期。我想在你回答之前,我们已经确定了好几次了。@mplungjan:没有人确切指出为什么月份/日期变为2012年12月。只是想帮忙。我收到了Inalid date警报我说:第二个是从非美国格式的日期生成的日期。Alnitak说您试图分析日期选择器的文本值,但该值的格式不适合您的区域设置。@Tassadaque:上面的示例本身不应生成任何无效日期。哪个警报无效?第一个警报?如果是,您能告诉我什么是$(“#日期选择器”)。val()
give you?错误已删除,但joinFormattedDate给了我NaN/NaN/NaN:(Date(Date.parse(“…”)
是多余的。只需使用Date(“…”)
.joindate.setDate(joindate.getDate()+numberOfDaysToAdd);@mplungjan我希望我能接受不止一个答案。在你的答案之前,我一直在关注他的答案,这解决了问题,所以在他将演示链接添加到他的答案之前,我接受了这个答案,从上面的评论中可以看出这一点。我感谢你的努力,希望将来能找到你的帮助:)–@Tassadaque-您是否尝试了我的jQuery datepicker建议,而不是简单的javascript建议?您至少有足够的分数支持投票。您解决了一半的问题。首先获得正确的日期。getDate()是第二个问题这并没有以一种有用的方式回答这个问题。为什么你认为这是答案?它是如何工作的?简单地告诉某人更改他们的代码,或者只是给某人没有任何上下文或意义的工作代码,并不能帮助他们了解他们做错了什么,对未来的读者也没有那么大的帮助。
joindate.setDate(joindate.getDate() + numberOfDaysToAdd);
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()
);
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + days);
return this;
};
var currentDate = new Date();
// to add 8 days to current date
currentDate.addDays(8);
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);
}