saravanan mp
saravanan mp

Reputation: 783

Based on number of days get start date and end date

Here is my code,

function getDateonperiod(elem)
{
    var periodval=$("#period"+elem).val();
    var days = periodval * 30;
    var startDate=new Date();
    var endDate = new Date();
    endDate.setDate(endDate.getDate() + days);
    var strDate = startDate.getFullYear() + "-" + (startDate.getMonth()+1) + "-" + startDate.getDate();
    $("#from_date"+elem).val(strDate);
    $("#to_date"+elem).val((endDate.getFullYear()+'-'+endDate.getMonth() + 1)+'-'+endDate.getDate());
}

Onchange input field value getting number of days days. I'm getting start date correctly but end date if input value 1 its working fine but its more than one its returning like this 2016-11-27 2016-21-28 from current date. How to fix this?

Upvotes: 0

Views: 1090

Answers (5)

Namish
Namish

Reputation: 114

I just extended Date function for adding days. This may help you:

Date.prototype.addDays = function(days) {
    this.setDate(this.getDate() + parseInt(days));
    return this;
};
$("#period").change(function() {
    var periodval = $("#period").val();
    var days = periodval;
    var startDate = new Date();
    var endDate = new Date();
    endDate.addDays(days);
    //endDate.setDate(endDate.getDate() + days);
    var strDate = startDate.getFullYear() + "-" + (startDate.getMonth() + 1) + "-" + startDate.getDate();
    $("#from_date").val(strDate);
    $("#to_date").val(endDate.getFullYear() + '-' + (endDate.getMonth() + 1) + '-' + endDate.getDate());
});

Upvotes: 0

TaLha Khan
TaLha Khan

Reputation: 2433

Simply use this library http://momentjs.com/

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js">

Your code with momentjs

function getDateonperiod(elem)
{
   var periodval=$("#period"+elem).val();
   var days = periodval * 30;
   var startDate = new moment();
   var endDate = new moment();
   endDate.add(days,'days');
   var strStartDate = startDate.format("YYYY - MM - DD");
   var strEndDate = endDate.format("YYYY - MM - DD");
   $("#from_date"+elem).val(strDate);
   $("#to_date"+elem).val(strEndDate);
 }

Upvotes: 0

Bek
Bek

Reputation: 3207

you can use moment.js here

var days = 10;
var dateFormat = 'YYYY-MM-DD';
var startFormatted = moment().format(dateFormat);
var endFormatted = moment().add(days, 'day').format(dateFormat);
console.log(startFormatted)
console.log(endFormatted)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>

Upvotes: 1

jolmos
jolmos

Reputation: 1575

You missed a parenthesis:

endDate.getFullYear()+'-'+(endDate.getMonth() + 1)+'-'+endDate.getDate();

Try this:

$( "#period" ).change(function() {
    var periodval=$("#period").val();
    var days = periodval * 30;
    var startDate=new Date();
    var endDate = new Date();
    endDate.setDate(endDate.getDate() + days);
    var strDate = startDate.getFullYear() + "-" + (startDate.getMonth()+1) + "-" + startDate.getDate();
    $("#from_date").val(strDate);
    $("#to_date").val(endDate.getFullYear()+'-'+(endDate.getMonth() + 1)+'-'+endDate.getDate());
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" id="period"  />
<input type="text" id="from_date" />
<input type="text" id="to_date" />

Upvotes: 1

void
void

Reputation: 36703

You are not adding days correctly.

function getDateonperiod(elem)
{
    var periodval=$("#period"+elem).val();
    var days = periodval * 30;
    var startDate=new Date();
    var endDate = new Date(startDate.getFullYear(),startDate.getMonth(),startDate.getDate()+n);
    var strDate = startDate.getFullYear() + "-" + (startDate.getMonth()+1) + "-" + startDate.getDate();
    $("#from_date"+elem).val(strDate);
    $("#to_date"+elem).val((endDate.getFullYear()+'-'+endDate.getMonth() + 1)+'-'+endDate.getDate());
}

Upvotes: 0

Related Questions