使用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(

我正在尝试使用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);
}
在第一次警报中,我得到日期
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获取表示所选日期的underyling
Date()
对象

这保证了日期对象是正确的,而与
日期选择器中指定的日期格式或当前区域设置无关

然后使用:

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 a
Date()
对象在内部距离历元只有一毫秒的偏移量。它怎么可能“不正确”?如果您使用非美国格式的日期(例如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);
    }