Skip to content

Instantly share code, notes, and snippets.

@HT-7
Last active June 29, 2022 23:10
Show Gist options
  • Save HT-7/3d142e81d292274abf1d5aeeb4e705c8 to your computer and use it in GitHub Desktop.
Save HT-7/3d142e81d292274abf1d5aeeb4e705c8 to your computer and use it in GitHub Desktop.
JavaScript date calculator (backwards-compatible to ECMAscript 3)
var calcDate_data = {}; // initializing data object
function calcDate(date1, date2){
// memorize input to detect invalid input
calcDate_data.input1 = date1;
calcDate_data.input2 = date2;
// initiate date object
var dt_date1 = new Date(date1);
var dt_date2 = new Date(date2);
// get the time stamp
date1 = dt_date1.getTime();
date2 = dt_date2.getTime();
var calc;
// check which time stamp is greater
if (date1 > date2){
calc = new Date(date1 - date2) ;
} else {
calc = new Date(date2 - date1) ;
}
// retrieve the date, month and year
var calc_format_tmp = calc.getDate() + '-' + (calc.getMonth()+1)+ '-'+calc.getFullYear();
// convert to an array and store
var calc_format = calc_format_tmp.split("-");
// subtract each member of our array from the default date
var days_passed = parseInt(Math.abs(calc_format[0]) - 1);
var months_passed = parseInt(Math.abs(calc_format[1]) - 1);
var years_passed = parseInt(Math.abs(calc_format[2] - 1970));
// set up custom text
var years_plural = ["year", "years"];
var months_plural = ["month", "months"];
var days_plural = ["day", "days"];
// convert to days and sum together
var total_days = (years_passed * 365) + (months_passed * 30.417) + days_passed;
// display result with custom text
var result = ""; // declare string
if (years_passed == 1) result+=years_passed+' ' + years_plural[0]+' ';
if (years_passed > 1 ) result+=years_passed+' ' + years_plural[1]+' ';
if (months_passed == 1) result+=months_passed+' ' + months_plural[0]+' ';
if (months_passed > 1 ) result+=months_passed+' ' + months_plural[1]+' ';
if (days_passed == 1) result+=days_passed+' ' + days_plural[0];
if (days_passed > 1 ) result+=days_passed+' ' + days_plural[1];
// put last result into object so it can be alerted to the user
calcDate_data.last_result = {
"total_days" : Math.round(total_days),
"text" : result
};
// message returned when an invalid date was input
if (! calcDate_data.last_result.text || calcDate_data.input1==null || calcDate_data.input2==null) {
calcDate_data.last_result.text = "At least one input date is invalid.";
}
// return the result
return calcDate_data.last_result;
}
// example use
calcDate(
// prompt user to enter two dates
prompt("Date calculator \n Enter start date"),
prompt("Date calculator \n Enter end date")
);
alert(calcDate_data.last_result.text); // alert result text
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment