Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 4 of 4
  1. #1
    New Coder
    Join Date
    Dec 2010
    Posts
    20
    Thanks
    7
    Thanked 0 Times in 0 Posts

    Question Need help with my math equation getting values from form fields

    I am having some trouble trying to fix my math equation to calculate the total rent by aquiring values from my form fields. Converting the date fields to days and finding the number of days via two date fields is mainly where I am having trouble. Also, I am trying to have a window pop up before submission but the onclick event does not seem to function properly. Any suggestions would be greatly appreciated. Thank you.

    Below is the math equation I have come up with:
    Code:
    //calculate days from date field
    				
    				function calcTotal(date1, date2) {
    					
    					//assign variables
    					
    					var equip = parseFloat(document.forms[0].equipment.value)
    					var pDate = parseFloat(document.forms[0].pickupDate.value)
    					var pHours = parseFloat(document.forms[0].pickupHours.value)
    					var pMinutes = parseFloat(document.forms[0].pickupMinutes.value)
    					var rDate = parseFloat(document.forms[0].returnDate.value)
    					var rHours = parseFloat(document.forms[0].returnHours.value)
    					var rMinutes = parseFloat(document.forms[0].returnMinutes.value)
    					
        				// The number of milliseconds in one day
       					 var ONE_DAY = 1000 * 60 * 60 * 24
    	
        				// Convert both dates to milliseconds
       					 var date1_ms = rDate.getTime()
       					 var date2_ms = pDate.getTime()
    
        				// Calculate the difference in milliseconds
       					 
       					var difference_ms = Math.abs(date1_ms - date2_ms)
        
       					 
       					//calculate total cost and diplay in window.confirm() dialog box
       					 	
       					var pTime = pHours + pMinutes;
    					var rTime = rHours + rMinutes;
    					var total = (((difference_ms/ONE_DAY) - 1) * 24) * equip + ((rTime + (24 - pTime)) * equip);
    					var OK = window.confirm(" The total rental cost is $" + total + "\n Click OK to accept, Cancel to decline");
    
    					if (OK) {return true}
    					else {return false}
    				
    				}
    Below is the body section of the form:
    Code:
    <input type = "submit" name = "submit" value = "Submit Reservation" onclick = "calcTotal()"/>

  • #2
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    18,300
    Thanks
    203
    Thanked 2,561 Times in 2,539 Posts
    What exactly is the trouble you are having? We cannot guess that! Do you receive error messages? Or is the result of the calculation wrong?

    What is the format of the dates as input by the user? Have you tried using your error console or Firebug? Or placing alerts in the code at strategic intervals to check the progress.

    As before, you are trying to handle too many things at the same time. Get the pricing to work before you start thinking about pop-up windows.

    Temporarily simplify you code to just calaculate the price based on days (not hours or minutes). Once that works then add other features gradually, testing at each stage.

    onclick = "return calcTotal()"


    Quizmaster: What R is a dish said to be best served cold?
    Contestant: Toast.

  • #3
    New Coder
    Join Date
    Dec 2010
    Posts
    20
    Thanks
    7
    Thanked 0 Times in 0 Posts
    I am getting an error that says that rDate.getTime is not a function, when clearly I have set it as a variable within a function.

    How do I get the dates from the form field to function properly as the variables I am using and how can I incorporate those into my equation to get a total cost?

    My test code below seems to work properly but when I try to assign the variables to form fields, I end up with the rDate.getTime is not a function as in my code in the above post.
    Code:
    <script>
    //calculate days from date field
                   
                    function calcTotal(date1, date2) {
                       
                        //assign variables
                       
                        var equip = 20
                        var pDate = new Date(2010,12,5)
                        var pHours = 9
                        var pMinutes = 0
                        var rDate = new Date(2010,12,8)
                        var rHours = 11
                        var rMinutes = 0
                       
                        // The number of milliseconds in one day
                            var ONE_DAY = 1000 * 60 * 60 * 24
       
                        // Convert both dates to milliseconds
                            var date1_ms = rDate.getTime()
                            var date2_ms = pDate.getTime()
    
                        // Calculate the difference in milliseconds
                            
                           var difference_ms = Math.abs(date1_ms - date2_ms)
       
                            
                           //calculate total cost and diplay in window.confirm() dialog box
                               
                           var pTime = pHours + pMinutes;
                        var rTime = rHours + rMinutes;
                        var total = (((difference_ms/ONE_DAY) - 1) * 24) * equip + ((rTime + (24 - pTime)) * equip);
                        var OK = window.confirm(" The total rental cost is $" + total + "\n Click OK to accept, Cancel to decline");
    
                        if (OK) {return true}
                        else {return false}
                   
                    }
    calcTotal("x","y")
    </script>
    
    some text to show on page
    Last edited by Broll05; 12-08-2010 at 06:45 PM.

  • #4
    Supreme Master coder! Philip M's Avatar
    Join Date
    Jun 2002
    Location
    London, England
    Posts
    18,300
    Thanks
    203
    Thanked 2,561 Times in 2,539 Posts
    You do not show how the dates are being entered by the user. And you are not passing the date to rDdate in the correct format which must be YYYY, MM, DD.

    To validate and find the difference between two dates entered in MM/DD/YYYY format, with hours and minutes obtained from elsewhere (drop-down select lists) :-

    Code:
    <form name = "myform">
    Enter First Date MM/DD/YYYY <input type = "text" name = "date1" id = "date1"><br>
    Enter Second Date MM/DD/YYYY <input type = "text" name = "date2" id = "date2"><br><br>
    <br><br>
    
    <input type = "button" value = "Check Date" onclick = "checkit()">
    </form>
    
    <script type = "text/javascript">
    
    function checkit() {
    
    var today = new Date();
    var nowyear = today.getFullYear();
    
    var d1 = document.myform.date1.value.split("/");
    var yr = d1[2];
    var mm = d1[0]-1;  // months in Javascript are 0-11
    var dy = d1[1];
    var OK1 = checkValidDate(yr,mm,dy);  // OK1 returns true or false
    if ((yr < nowyear || yr > nowyear +1)) {OK1 = false}    // only valid for current year and next year
    
    var d2 = document.myform.date2.value.split("/");
    yr = d2[2];
    mm = d2[0]-1;
    dy = d2[1];
    var OK2 = checkValidDate(yr,mm,dy);
    if ((yr < nowyear || yr > nowyear+2)) {OK2 = false}
    
    if ((!OK1) || (!OK2)) {
    alert ("Invalid dates\(s\) or incorrect format!  Please try again.");
    document.myform.date1.value = "";
    document.myform.date2.value = "";
    return false;
    }
    
    // arbitrary or example start and end times obtained from elsewhere (select lists) - make sure the values are numbers and not strings!
    
    // EXAMPLE var fhrs = document.forms[0].pickupHours.value;
    var fhrs = 11;
    var fmins = 30;
    var shrs = 14;
    var smins = 0;
    
    var firstDate = new Date(d1[2],d1[0]-1,d1[1],fhrs,fmins);  // note month must be 0-11!!  Also note USA date format
    var secondDate = new Date(d2[2],d2[0]-1,d2[1],shrs,smins);  
    var difference = secondDate.getTime() - firstDate.getTime();
    if (difference < 0) {
    alert ("The second date must be after the first date!");
    document.myform.date1.value = "";
    document.myform.date2.value = "";
    return false;
    }
    
    // convert milliseconds to days, hours, minutes
    
    var secs = difference/1000;
    var days = Math.floor(secs/86400);
    secs %= 86400;
    var hours= Math.floor(secs/3600);
    if (hours<10) {hours = "0" + hours}
    secs %= 3600;
    var mins = Math.floor(secs/60);
    if (mins<10) {mins = "0" + mins}
    alert ("Time Difference is " + days + " Days " + hours + " Hours " + mins + " Minutes");
    }
    
    
    function checkValidDate(yr,mm,dy) {
    var nd = new Date();
    nd.setFullYear(yr,mm,dy);  // YYYY,MM(0-11),DD
    var ndmm = nd.getMonth();
    if (ndmm != mm) {
    return false; 
    }
    else {
    return true;
    }
    }
    
    </script>
    I do hope that this will put an end to your problems! The script calculates the days, hours, minutes between two dates/times. All you have to do is multiply the days by the daily rate and the hours by the hourly rate, then add em' together to get the total hire cost. Get that working properly before you try to move on to something else!
    Last edited by Philip M; 12-08-2010 at 09:00 PM. Reason: Noticed typo


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •