Для этого формата (при условии, что datepart имеет формат dd-mm-yyyy) в простом использовании javascript dateString2Date
.
[ Edit ] Добавлен служебный метод ES6 для анализа датыстрока, использующая параметр строки формата (format
), чтобы сообщить методу о позиции даты / месяца / года во входной строке.
var result = document.querySelector('#result');
result.textContent =
`*Fixed\ndateString2Date('01-01-2016 00:03:44'):\n => ${
dateString2Date('01-01-2016 00:03:44')}`;
result.textContent +=
`\n\n*With formatting\ntryParseDateFromString('01-01-2016 00:03:44', 'dmy'):\n => ${
tryParseDateFromString('01-01-2016 00:03:44', "dmy").toUTCString()}`;
result.textContent +=
`\n\nWith formatting\ntryParseDateFromString('03/01/2016', 'mdy'):\n => ${
tryParseDateFromString('03/01/1943', "mdy").toUTCString()}`;
// fixed format dd-mm-yyyy
function dateString2Date(dateString) {
var dt = dateString.split(/\-|\s/);
return new Date(dt.slice(0,3).reverse().join('-') + ' ' + dt[3]);
}
// multiple formats (e.g. yyyy/mm/dd or mm-dd-yyyy etc.)
function tryParseDateFromString(dateStringCandidateValue, format = "ymd") {
if (!dateStringCandidateValue) { return null; }
let mapFormat = format
.split("")
.reduce(function (a, b, i) { a[b] = i; return a;}, {});
const dateStr2Array = dateStringCandidateValue.split(/[ :\-\/]/g);
const datePart = dateStr2Array.slice(0, 3);
let datePartFormatted = [
+datePart[mapFormat.y],
+datePart[mapFormat.m]-1,
+datePart[mapFormat.d] ];
if (dateStr2Array.length > 3) {
dateStr2Array.slice(3).forEach(t => datePartFormatted.push(+t));
}
// test date validity according to given [format]
const dateTrial = new Date(Date.UTC.apply(null, datePartFormatted));
return dateTrial && dateTrial.getFullYear() === datePartFormatted[0] &&
dateTrial.getMonth() === datePartFormatted[1] &&
dateTrial.getDate() === datePartFormatted[2]
? dateTrial :
null;
}