I am using a Bootstrap DateTime widget in my template, I have placed 2 widgets (From, To) side by side to select a particular range of dates, hours, or months according to need. I have linked both widgets, so that user may always choose the "To" range lesser than "From". For that purpose I have added or subtracted the dates by numbers like:
var evDate = ev.date;
if (evDate != null) {
$('.'+reportCategoryTo.id).
datetimepicker('setStartDate', evDate);
var evDateObject = new Date(evDate.valueOf());
var reportDateTimeCategoryFrom = report_date_time_category[0][0];
var reportDateTimeCategoryTo = report_date_time_category[1][0];
if (reportDateTimeCategoryFrom.category.indexOf("Daily") !== -1) {
var newDate = evDateObject.setDate(evDateObject.getDate() + 31);
}
else if (reportDateTimeCategoryFrom.category.indexOf("Monthly") !== -1) {
var newDate = evDateObject.setDate(evDateObject.getDate() + 365);
}
else {
var newDate = evDateObject.setDate(evDateObject.getHours() + 24);
}
var newDateObject = new Date(newDate);
$('.'+reportCategoryTo.id).
datetimepicker('setEndDate', newDateObject);
}
else {
console.log('The change is null',evDate);
$('.'+reportCategoryTo.id).
datetimepicker('setStartDate', null);
$('.'+reportCategoryTo.id).
datetimepicker('setEndDate', null);
}
});
This does'nt show the range when user chooses like 30th of may or something similar.
I then Found Datejs
which helps in adding or subtracting dates and etc. I used Datejs like this:
if (reportDateTimeCategoryFrom.category.indexOf("Daily") !== -1) {
var newDate = evDateObject.setDate(evDateObject.getDate().add(31).days());
}
else if (reportDateTimeCategoryFrom.category.indexOf("Monthly") !== -1) {
var newDate = evDateObject.setDate(evDateObject.getDate().add(365));
}
else {
var newDate = evDateObject.setDate(evDateObject.getHours().addHours(24));
But my console prompts this error:
TypeError: evDateObject.getDate(...).add is not a function
I have Imported the date.js
file but even then this is'nt working. Please Help!
Datejs is abandoned, I wouldn't recommend using it. Read here.
You might want to consider Moment.js, which also has functions for datetime arithmetic.
For example:
var m = moment(evDateObject.getDate());
m.add('months', 1);
evDateObject.setDate(m.toDate());