Brandrally
Brandrally

Reputation: 849

Jquery / Javascript - Add years to date variable

I have a small trouble that would be great to have some help with. I am creating a small form that I want to take a current date formatted 'dd/mm/yyyy' and add a year(s) variable from a drop-down box to create a final expiry date. The only trouble is that I do not know how to parse the start-date as a date variable in order to complete the calculation. Any thoughts or help would be greatly appreciated. Paul.

<script>
    $(document).ready(function () {
        $("#registerfor, #startdate, ").change(function () {
            // Get Variables
            var startdate = $("#startdate").val();
            var registerfor = $("#registerfor").val();
            // Add Years to Date
            var expirydate = startdate + registerfor;
            // Send Result on
            $("#expires").val(expirydate);
        });
    });
</script>
<input name="startdate" id="startdate" value="dd/mm/yyyy" />
<select id="registerfor" name="registerfor">
    <option value="1">1 Year</option>
    <option value="2">2 Years</option>
    <option value="3">3 Years</option>
</select>

Upvotes: 16

Views: 63138

Answers (6)

Christophe P
Christophe P

Reputation: 960

A quick and easy solution :

var myDate = new Date();
myDate.setFullYear(myDate.getFullYear() + nbYearsToAdd);

"nbYearsToAdd" can be negative.

Upvotes: 36

poomanchu
poomanchu

Reputation: 1

I would:

  • put the date in a format that Date.parse can work nicely with (mm/dd/yyyy)
  • add the number of milliseconds in a year times the selected option
  • Reformat the new value to a human-readable format and populate #expires

    var dateArr = $("#startdate").val().split();
    var niceDate = Number(dateArr[1]) + "/" + Number(dateArr[0]) + "/" + Number(dateArr[2]);

    var expDate = Date.parse(niceDate) + 365*24*60*60*1000*Number($("#registerfor").val());

    $("#expires").val(expDate.getMonth()+1 + "/" + expDate.getDate() + "/" + expDate.getFullYear());

If you need 2-digit days and months for expiration date, you could have extra variables that hold a string version of them and check something like:
var padMonth = expDate.getMonth()+1;
if(expDate.getMonth()+1 < 10) padMonth = "0" + Number(expDate.getMonth()+1);

After which, you would use padMonth in $("#expires").val(...)

Upvotes: 0

Bruno
Bruno

Reputation: 5822

Sometimes what looks like quite a straight forward task becomes quite complicated.

 $(document).ready( function () {

    $("#registerfor, #startdate").change( function () {

        var str = $("#startdate").val();

        if( /^\d{2}\/\d{2}\/\d{4}$/i.test( str ) ) {

            var parts = str.split("/");

            var day = parts[0] && parseInt( parts[0], 10 );
            var month = parts[1] && parseInt( parts[1], 10 );
            var year = parts[2] && parseInt( parts[2], 10 );
            var duration = parseInt( $("#registerfor").val(), 10);

            if( day <= 31 && day >= 1 && month <= 12 && month >= 1 ) {

                var expiryDate = new Date( year, month - 1, day );
                expiryDate.setFullYear( expiryDate.getFullYear() + duration );

                var day = ( '0' + expiryDate.getDate() ).slice( -2 );
                var month = ( '0' + ( expiryDate.getMonth() + 1 ) ).slice( -2 );
                var year = expiryDate.getFullYear();

                $("#expires").val( day + "/" + month + "/" + year );

            } else {
                // display error message
            }
        }
    });
});

Here is a fiddle so you can see it in action.

Upvotes: 8

Sagar Hirapara
Sagar Hirapara

Reputation: 1697

Dude, it's already working. If you still want to convert in date then do this:

var dat=Date.parse(startdate );

Upvotes: 0

Hary
Hary

Reputation: 5818

var dt = new Date($("#startdate").val());

var updateDate = dt.setDate(dt.getFullYear() + $("#registerfor").val());

var dd = updateDate.getDate();
var mm = updateDate.getMonth();
var y = updateDate.getFullYear();

var someFormattedDate = dd + '/'+ mm + '/'+ y;
console.log(someFormattedDate);

Upvotes: 1

KAsh
KAsh

Reputation: 304

lots of date picker jquery are available on the net

This

one is my favourite, easy to implement and edit as per our needs.

if you want to use script from your code, you can directly pass the date value to var startdate like

var startdate=<?php echo date("Y-m-d")?>

try this.. may help.

Upvotes: -1

Related Questions