Enter the mother's pregnancy information into this calculator and JavaScript will provide an estimated conception date, birth due date, and an estimated current fetal age. Great for all those mothers-to-be!
Add the below code to the <body> section of your page:
<scriptlanguage="javascript"type="text/javascript"> /* Visit http://www.yaldex.com/ for full source code and get more free JavaScript, CSS and DHTML scripts! */ <!-- Begin function isValidDate(dateStr){
// Checks for the following valid date formats: // MM/DD/YY MM/DD/YYYY MM-DD-YY MM-DD-YYYY
var datePat =/^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;// requires 4 digit year
var matchArray = dateStr.match(datePat);// is the format ok? if(matchArray ==null){ alert("Date is not in a valid format.") returnfalse; } month = matchArray[1];// parse date into variables day = matchArray[3]; year = matchArray[4]; if(month <1|| month >12){// check month range alert("Month must be between 1 and 12."); returnfalse; } if(day <1|| day >31){ alert("Day must be between 1 and 31."); returnfalse; } if((month==4|| month==6|| month==9|| month==11)&& day==31){ alert("Month "+month+" doesn't have 31 days!") returnfalse; } if(month ==2){// check for february 29th var isleap =(year %4==0&&(year %100!=0|| year %400==0)); if(day>29||(day==29&&!isleap)){ alert("February "+ year +" doesn't have "+ day +" days!"); returnfalse; } } returntrue; }
day = dateObj.getDate(); day =(day <10)?"0"+ day : day;
year = dateObj.getYear(); if(year <2000) year +=1900;
return(month +"/"+ day +"/"+ year); }
function pregnancyCalc(pregform){ menstrual =newDate();// creates new date objects ovulation =newDate(); duedate =newDate(); today =newDate(); cycle =0, luteal =0;// sets variables to invalid state ==> 0
cycle =(pregform.cycle.value==""?28: pregform.cycle.value);// defaults to 28 // validates cycle range, from 22 to 45 if(pregform.cycle.value!=""&&(pregform.cycle.value<22|| pregform.cycle.value>45)){ alert("Your cycle length is either too short or too long for \n" +"calculations to be very accurate! We will still try to \n" +"complete the calculation with the figure you entered. "); }
luteal =(pregform.luteal.value==""?14: pregform.luteal.value);// defaults to 14 // validates luteal range, from 9 to 16 if(pregform.luteal.value!=""&&(pregform.luteal.value<9|| pregform.luteal.value>16)){ alert("Your luteal phase length is either too short or too long for \n" +"calculations to be very accurate! We will still try to complete \n" +"the calculation with the figure you entered. "); }
// sets ovulation date to menstrual date + cycle days - luteal days // the '*86400000' is necessary because date objects track time // in milliseconds; 86400000 milliseconds equals one day ovulation.setTime(menstrual.getTime()+(cycle*86400000)-(luteal*86400000)); pregform.conception.value= dispDate(ovulation);
// sets due date to ovulation date plus 266 days duedate.setTime(ovulation.getTime()+266*86400000); pregform.duedate.value= dispDate(duedate);
// sets fetal age to 14 + 266 (pregnancy time) - time left var fetalage =14+266-((duedate - today)/86400000); weeks =parseInt(fetalage /7);// sets weeks to whole number of weeks days =Math.floor(fetalage %7);// sets days to the whole number remainder
// fetal age message, automatically includes 's' on week and day if necessary fetalage = weeks +" week"+(weeks >1?"s":"")+", "+ days +" days"; pregform.fetalage.value= fetalage;
returnfalse;// form should never submit, returns false } // End --> </script> <formonSubmit="return pregnancyCalc(this);"> <table> <tr><td> <pre> Last Menstrual Period: <inputtype=textname=menstrualvalue=""size=10maxlength=10> (MM/DD/YYYY format)
Average Length of Cycles: <inputtype=textname=cyclevalue=""size=3maxlength=3> (22 to 45) (defaults to 28)
Average Luteal Phase Length: <inputtype=textname=lutealvalue=""size=3maxlength=3> (9 to 16) (defaults to 14)