65 lines
No EOL
1.6 KiB
JavaScript
65 lines
No EOL
1.6 KiB
JavaScript
'use strict';
|
|
|
|
function parseDate(type, text) {
|
|
const isUs = type === 'us';
|
|
const trimmedText = text.trim();
|
|
|
|
// try international format first YYYY-MM-DD
|
|
const parts = trimmedText.match(/^(\d{4})\D+(\d{2})(?:\D+(\d{2})\b)$/);
|
|
let day, month, year;
|
|
let value;
|
|
|
|
if (parts) {
|
|
year = Number(parts[1]) || 2000;
|
|
month = Number(parts[2]) || 0;
|
|
day = Number(parts[3]) || 0;
|
|
value = new Date(Date.UTC(year, month - 1, day));
|
|
} else {
|
|
const parts = trimmedText.match(/^(\d+)\D+(\d+)(?:\D+(\d+)\b)$/);
|
|
if (!parts) {
|
|
value = null;
|
|
} else {
|
|
day = Number(parts[isUs ? 2 : 1]);
|
|
month = Number(parts[isUs ? 1 : 2]);
|
|
year = Number(parts[3]);
|
|
|
|
if (!day || !month) {
|
|
value = null;
|
|
} else {
|
|
value = new Date(Date.UTC(year, month - 1, day));
|
|
}
|
|
}
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
function parseBirthday(type, text) {
|
|
const isUs = type === 'us';
|
|
const trimmedText = text.trim();
|
|
|
|
let day, month, year;
|
|
let value;
|
|
|
|
const parts = trimmedText.match(/^(\d+)\D+(\d+)$/);
|
|
if (!parts) {
|
|
value = null;
|
|
} else {
|
|
day = Number(parts[isUs ? 2 : 1]);
|
|
month = Number(parts[isUs ? 1 : 2]);
|
|
|
|
if (!day || !month) {
|
|
value = null;
|
|
} else {
|
|
value = new Date(Date.UTC(2000, month - 1, day));
|
|
}
|
|
}
|
|
console.log(value);
|
|
|
|
return value;
|
|
}
|
|
|
|
module.exports = {
|
|
parseDate,
|
|
parseBirthday
|
|
}; |