functionfoundry
Version:
Pure function JavaScript library
65 lines (52 loc) • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = parsedate;
var _constants = require('./constants');
var _error = require('./error');
var _error2 = _interopRequireDefault(_error);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// PARSEDATE converts a value into a Date object.
// Copyright 2015 JC Fisher
function parsedate(val) {
/* *******************
Extracted from Social Calc
convert_date_julian_to_gregorian(juliandate)
ymd->{}
.year
.month
.day
From: http://aa.usno.navy.mil/faq/docs/JD_Formula.html
Uses: Fliegel, H. F. and van Flandern, T. C. (1968). Communications of the ACM, Vol. 11, No. 10 (October, 1968).
Translated from the FORTRAN
************************* */
function convert_date_julian_to_gregorian(juliandate) {
var L, N, I, J, K;
L = juliandate + 68569;
N = Math.floor(4 * L / 146097);
L = L - Math.floor((146097 * N + 3) / 4);
I = Math.floor(4000 * (L + 1) / 1461001);
L = L - Math.floor(1461 * I / 4) + 31;
J = Math.floor(80 * L / 2447);
K = L - Math.floor(2447 * J / 80);
L = Math.floor(J / 11);
J = J + 2 - 12 * L;
I = 100 * (N - 49) + I + L;
return new Date(I, J - 1, K);
}
if (val instanceof Error) {
return val;
} else if (typeof val === 'number') {
// val is assumed to be serial number.
return convert_date_julian_to_gregorian(Math.floor(val + _constants.JulianOffset));
} else if (typeof val === 'string') {
var timestamp = Date.parse(val);
if (Number.isNaN(timestamp)) {
return _error2.default.value;
}
return new Date(timestamp);
}
return _error2.default.value;
}
module.exports = exports['default'];