使用javascript添加日期

时间:2011-06-16 06:56:30

标签: javascript jquery date javascript-events

我正在尝试使用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/

11 个答案:

答案 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()
);

Demo here

答案 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)

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

Here is a working example

(似乎需要这种标记才能引起注意)

如果您想保留代码,则需要更改

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);
}

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

答案 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);