2

I have a datetimepicker where the user picks up a date, and my requirement is I need 7 days difference between his selected date.

For eg,

if user has selected 2017-03-01 so i need last 7 days from 2017-03-01 and NOT the current date

All answers i checked here were based on days difference from today.

Can anyone help me out here ?

$("#dateTimePickerIdWhereUserSelectsHisDate").val() - (7 * 24 * 60 * 60 * 1000);

this was on one of the answers but didn't work.

How can I achieve this ?

Ashish Bahl
  • 1,482
  • 1
  • 18
  • 27

2 Answers2

2

Try This
SelectDateTime will give you selected date
604800000 is 7 days in miliseconds
prevDate will give you last 7 days Date

$("#startDate").on("dp.change", function(e) {
    if (e.oldDate != null) {
        if (e.date.format('D') != e.oldDate.format('D')) {

          var selectDateTime = e.date["_d"].getTime();
          var prevDateTImeMili = selectDateTime - 604800000;
            var  prevDate = msToDateTime(prevDateTImeMili)
          $('#startDate').data("DateTimePicker").hide();
        }
    }
});

msToDateTime is a function which converts milliseconds to DateTime

function msToDateTime(s) {
    Number.prototype.padLeft = function(base,chr){
           var  len = (String(base || 10).length - String(this).length)+1;
           return len > 0? new Array(len).join(chr || '0')+this : this;
    }
    if(s != null){
        s = new Date(s);
//      var d = new Date(s);
//      var d = new Date(s.getTime()+s.getTimezoneOffset()*60*1000+timeConversionToMilliseconds(sessionStorage.getItem("accounttimezone").split('+')[1]+':00'))
        var d = new Date(s.getTime()+(s.getTimezoneOffset()*60*1000)+ (330 *60*1000));
        dformat = [ d.getFullYear(),
                    (d.getMonth()+1).padLeft(),
                    d.getDate().padLeft()].join('-')+
                    ' ' +
                  [ d.getHours().padLeft(),
                    d.getMinutes().padLeft(),
                    d.getSeconds().padLeft()].join(':');
         return dformat;    
    }else{
        return " ";
    }
}
0

function getNDaysBefore(dateString, numberOfDaysBefore) {
    let startingDate = new Date(dateString).getTime();
    let datesArray = [],
        daysCounter = 0,
        day = 1000 * 60 * 60 * 24;
    while (daysCounter < numberOfDaysBefore + 1) {
        let newDateBeforeStaring = startingDate - day * daysCounter;
        datesArray.push(new Date(newDateBeforeStaring));
        daysCounter++;
    }
    return datesArray;
}
var dateString = "2016-03-01";
alert(getNDaysBefore(dateString,7));

With that kind of a function you can get any N days before the given date as an array of Date objects

andrewkiri
  • 135
  • 5