Добавление дней на дату с помощью 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
Скрипка @ http://jsfiddle.net/tassadaque/rEe4v/
11 ответов
Date('string')
попытается разобрать строку как m/d/yyyy
. Строка становится 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()
);
Я хотел бы призвать вас использовать 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.
}
предполагая, что numberOfDaysToAdd - номер:
joindate.setDate(joindate.getDate() + numberOfDaysToAdd);
первое предупреждение-это значение поля. второй-это сгенерированная дата из даты, не отформатированной в США.
вот рабочий пример
(кажется, что такая разметка необходима, чтобы ее заметили)если вы хотите сохранить свой код, то вам нужно изменить
var joindate = new Date(datepicker);
to
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 если месяц
if (mm<10) mm="0"+mm;
если вы используете datepicker из jQuery UI, то вы можете сделать
$('.new').val($("#DatePicker").datepicker( "setDate" , +1 ).val());
вместо функции
http://jqueryui.com/demos/datepicker/#method-setDate
устанавливает текущую дату элемент управления datepicker. Новая дата может быть датой объект или строка в текущей дате формат (например, '01/26/2009'), ряд дней с сегодняшнего дня (например +7) или строка значений и периодов ('y' для годы, " м "- месяцы, " ж " - недели., 'D' Для дней, например, '+1м +7Д'), или null чтобы очистить выбранную дату.
попробовать
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 при передаче в конструктор даты.
чтобы ответить на вашу реальную проблему, я думаю, что ваша проблема заключается в том, что вы пытаетесь проанализировать текстовое значение DatePicker, когда это не в правильном формате для вашей локали.
вместо .val()
использовать:
var joindate = $('#DatePicker').datepicker("getDate");
чтобы получить underyling Date()
объект, представляющий выбранную дату непосредственно из jQuery.
Это гарантирует, что объект Date является правильным независимо от формата даты, указанной в DatePicker
или текущий локаль.
затем использовать:
joindate.setDate(joindate.getDate() + numberOfDaysToAdd);
чтобы двигаться дальше.
это опечатка вокруг 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);
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);
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);
}
попробуйте это.
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);
}
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);