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