Добавьте дни до времени, используя 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

Fiddle is @http://jsfiddle.net/tassadaque/rEe4v/

Ответ 1

Date('string') попытается проанализировать строку как m/d/yyyy. Строка 24/06/2011, таким образом, становится Dec 6, 2012. Причина: 24 рассматривается как месяц... 1 = > Январь 2011, 13 = > Январь 2012 года, следовательно 24 = > Декабрь 2012 года. Надеюсь, вы понимаете, что я имею в виду. Итак:

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

Демо здесь

Ответ 2

Я хотел бы призвать вас использовать библиотеку 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.
}

Ответ 3

Предполагая, что numberOfDaysToAdd является числом:

joindate.setDate(joindate.getDate() + numberOfDaysToAdd);

Ответ 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;

Если вы используете datepicker из пользовательского интерфейса jQuery, вы можете сделать

$('.new').val($("#DatePicker").datepicker( "setDate" , +1 ).val());

вместо вашей функции

http://jqueryui.com/demos/datepicker/#method-setDate

Устанавливает текущую дату для DatePicker. Новая дата может быть датой объект или строка в текущей дате формат (например, '01/26/2009 '), номер дней с сегодняшнего дня (например, +7) или строка значений и периодов ('y' для лет, "м" в течение нескольких месяцев, "w" в течение нескольких недель, 'd' в течение нескольких дней, например. '+ 1m + 7d'), или null для очистки выбранной даты.

Ответ 5

Try

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 ожидает формат MM/DD/YYYY, а не DD/MM/YYYY при передаче в конструктор даты.

Ответ 6

Чтобы ответить на вашу реальную проблему, я думаю, ваша проблема в том, что вы пытаетесь разобрать текстовое значение DatePicker, если это не в правильном формате для вашей локали.

Вместо .val() используйте:

var joindate = $('#DatePicker').datepicker("getDate");

чтобы получить объект underyling Date(), представляющий выбранную дату непосредственно из jQuery.

Это гарантирует, что объект даты правильный, независимо от формата даты, указанного в DatePicker или текущей языковой версии.

Затем используйте:

joindate.setDate(joindate.getDate() + numberOfDaysToAdd);

чтобы переместить его.

Ответ 7

Это опечатка round 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);

Ответ 8

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

Ответ 9

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/

Ответ 10

попробуйте это.

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

Ответ 11

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