Date and PV calculations

dateMath() functions PV for exact date cash flows.

by taa1953

JavaScript

// ordinal values
window["PMT_METHOD"] = {
    "ARREARS": 0,
    "ADVANCE": 1
};

window["DEBT_TYPE"] = {
    "LOAN": 0,
    "LEASE": 1
};

// ordinal values
window["PMT_FREQUENCY"] = {
    "DAILY": 1,
    "WEEKLY": 2,
    "BIWEEKLY": 3,
    "TWICEMONTHLY": 4,
    "EVERY4WKS": 5,
    "MONTHLY": 6,
    "BIMONTHLY": 7,
    "QUARTERLY": 8,
    "EVERY4MONTHS": 9,
    "SEMIANNUALLY": 10,
    "ANNUALLY": 11
};

// ordinal values
window["CMP_FREQUENCY"] = {
    "CONTINUOUS": 0,
    "DAILY": 1,
    "WEEKLY": 2,
    "BIWEEKLY": 3,
    "TWICEMONTHLY": 4,
    "EVERY4WKS": 5,
    "MONTHLY": 6,
    "BIMONTHLY": 7,
    "QUARTERLY": 8,
    "EVERY4MONTHS": 9,
    "SEMIANNUALLY": 10,
    "ANNUALLY": 11,
    "EXACT": 12
};


// periods per year (constants)
// var PPY = [-1, 360, 52, 26, 24, 13, 12, 6, 4, 3, 2, 1, -1];
window["PPY"] = [-1, 360, 52, 26, 24, 13, 12, 6, 4, 3, 2, 1, -1];
// months per frequency
window["MPF"] = [-1, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 12, -1];
// days per frequency, monthly periods do not have consistent number of days, thus error.
window["DPF"] = [-1, 1, 7, 14, -1, 28, -1, -1, -1, -1, -1, -1, -1];
window["ONE_DAY"] = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
window["DAYS_PER_WEEK"] = 7;

window["strFrequencies"] = ["Continuous", "Daily", "Weekly", "BiWeekly", "Twice Monthly", "Every 4 Weeks", "Monthly", "BiMonthly", "Quarterly", "Every 4 Months", "Semiannually", "Annually", "Exact/Simple"];

// ordinal
window["DAYS_IN_YEAR"] = {
    "THREE_SIXTY": 0,
    "THREE_SIXTY_FOUR": 1,
    "THREE_SIXTY_FIVE": 2,
    "THREE_SIXTY_SIXTY": 3
};
window["diy"] = DAYS_IN_YEAR["THREE_SIXTY"];

window["DAYS_PER_YEAR"] = [360, 364, 365, 366];
window["dpy"] = DAYS_PER_YEAR[diy];

//alert(dpy+"\n"+diy);
var calcRates = function() {
/*-This method returns the same value as calling Excel's
  Nominal( Effect( Rate, CompoundingPeriodsPerYear ), PmtPeriodsPerYear )
  -Returns an effective annual rate */
    var effectiveRate_ = function(nominalRate, pmtFreq,...