Добавьте дни к дате, используя JavaScript - PullRequest
11 голосов
/ 16 июня 2011

Я пытаюсь добавить дни к определенной дате, используя 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 @ @ 1010 *http://jsfiddle.net/tassadaque/rEe4v/

Ответы [ 11 ]

21 голосов
/ 16 июня 2011

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

Демо здесь

5 голосов
/ 16 июня 2011

Я хотел бы призвать вас использовать библиотеку 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.
}
5 голосов
/ 16 июня 2011

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

joindate.setDate(joindate.getDate() + numberOfDaysToAdd);
4 голосов
/ 16 июня 2011

Первое предупреждение - это значение поля.вторая - это сгенерированная дата из даты, не отформатированной в США.

Вот рабочий пример

(кажется, что этот вид разметки необходим, чтобы быть замеченным)

Если вы хотите сохранить свой код,затем вам нужно изменить

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 </p>

if (mm<10) mm="0"+mm;

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

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

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

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

3 голосов
/ 16 июня 2011

Попробуйте

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 при передаче в конструктор Date.

2 голосов
/ 16 июня 2011

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

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

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

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

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

Тогда используйте:

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

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

1 голос
/ 09 января 2013
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);
1 голос
/ 16 июня 2011

Это опечатка? 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);
0 голосов
/ 31 августа 2017
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);
0 голосов
/ 14 февраля 2015

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

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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...