@antv/data-wizard
Version:
A js/ts library for data processing
72 lines (71 loc) • 2.73 kB
JavaScript
;
// TODO: better date validator, not regex solution. Whole column valid.
// examples:
// 1999-366 false, 2004-366 true;
// 199501,199502,199503,199519 -> 199519 19 as month -> false;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isDateString = exports.getIsoTimes = exports.getIsoDates = void 0;
var tslib_1 = require("tslib");
var delimiter = '([-_./\\s])';
var year = '(18|19|20)\\d{2}';
var month = '(0?[1-9]|1[012])';
var day = '(0?[1-9]|[12]\\d|3[01])';
var week = '([0-4]\\d|5[0-2])';
var weekday = '([1-7])';
var hour = '(0?\\d|1\\d|2[0-4])';
var minute = '(0?\\d|[012345]\\d)';
var second = minute;
var millisecond = '\\d{1,4}';
var yearday = '((([0-2]\\d|3[0-5])\\d)|36[0-6])';
var offset = "(Z|[+-]" + hour + "(:" + minute + ")?)";
// https://www.cl.cam.ac.uk/~mgk25/iso-time.html
var getIsoDates = function (isStrict) {
if (isStrict === void 0) { isStrict = true; }
return [
// 1991
"" + year,
// 1999-W12-7
// TODO: Date.parse do not parse this format
"" + year + delimiter + (isStrict ? '' : '?') + "W" + week + "(" + delimiter + (isStrict ? '' : '?') + weekday + ")?",
// 12-22-1999
"" + month + delimiter + (isStrict ? '' : '?') + day + delimiter + (isStrict ? '' : '?') + year,
// 1999-12-22 19991222
"" + year + delimiter + (isStrict ? '' : '?') + month + delimiter + (isStrict ? '' : '?') + day,
// 1999-12
"" + year + delimiter + (isStrict ? '' : '?') + month,
// 1999-200
"" + year + delimiter + (isStrict ? '' : '?') + yearday,
];
};
exports.getIsoDates = getIsoDates;
var getIsoTimes = function (isStrict) {
if (isStrict === void 0) { isStrict = true; }
return [
// 23:20:20Z 23:20:20+08:00 23:20:20-08:00
hour + ":" + (isStrict ? '' : '?') + minute + ":" + (isStrict ? '' : '?') + second + "([.,]" + millisecond + ")?" + offset + "?",
// 23:20+08
hour + ":" + (isStrict ? '' : '?') + minute + "?" + offset,
];
};
exports.getIsoTimes = getIsoTimes;
var isoDates = exports.getIsoDates();
var isoTimes = exports.getIsoTimes();
var formatStr = tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(isoDates)), tslib_1.__read(isoTimes));
isoDates.forEach(function (d) {
isoTimes.forEach(function (t) {
formatStr.push(d + "[T\\s]" + t);
});
});
var formats = formatStr.map(function (item) {
return new RegExp("^" + item + "$");
});
function isDateString(value) {
for (var i = 0; i < formats.length; i += 1) {
var format = formats[i];
if (format.test(value.trim())) {
return true;
}
}
return false;
}
exports.isDateString = isDateString;