How to convert string like '01-01-1970 00:03:44'
to datetime?
Advertisement
Answer
For this format (assuming datepart has the format dd-mm-yyyy) in plain javascript use dateString2Date
. It may bite you, because of browser compatibility problems.
tryParseDateFromString
is ES6 utility method to parse a date string using a format string parameter (format
) to inform the method about the position of date/month/year in the input string. The date is constructed using Date.UTC
, circumventing the aforementioned browser compatibility problems.
// fixed format dd-mm-yyyy function dateString2Date(dateString) { const dt = dateString.split(/-|s/); return new Date(dt.slice(0, 3).reverse().join('-') + ' ' + dt[3]); } // multiple formats (e.g. yyyy/mm/dd (ymd) or mm-dd-yyyy (mdy) etc.) function tryParseDateFromString(dateStringCandidateValue, format = "ymd") { const candidate = (dateStringCandidateValue || ``) .split(/[ :-/]/g).map(Number).filter(v => !isNaN(v)); const toDate = () => { format = [...format].reduce((acc, val, i) => ({ ...acc, [val]: i }), {}); const parts = [candidate[format.y], candidate[format.m] - 1, candidate[format.d] ] .concat(candidate.length > 3 ? candidate.slice(3) : []); const checkDate = d => d.getDate && ![d.getFullYear(), d.getMonth(), d.getDate()] .find( (v, i) => v !== parts[i] ) && d || undefined; return checkDate( new Date(Date.UTC(...parts)) ); }; return candidate.length < 3 ? undefined : toDate(); } const result = document.querySelector('#result'); result.textContent = `*FixedndateString2Date('01-01-2016 00:03:44'):n => ${ dateString2Date('01-01-2016 00:03:44')}`; result.textContent += `nn*With formatting dmy tryParseDateFromString('01-12-2016 00:03:44', 'dmy'):n => ${ tryParseDateFromString('01-12-2016 00:03:44', "dmy").toUTCString()}`; result.textContent += `nn*With formatting mdy tryParseDateFromString('03/01/1943', 'mdy'):n => ${ tryParseDateFromString('03/01/1943', "mdy").toUTCString()}`; result.textContent += `nn*With invalid format tryParseDateFromString('12-13-2016 00:03:44', 'dmy'):n => ${ tryParseDateFromString('12-13-2016 00:03:44', "dmy")}`; result.textContent += `nn*With formatting invalid string tryParseDateFromString('03/01/null', 'mdy'):n => ${ tryParseDateFromString('03/01/null', "mdy")}`; result.textContent += `nn*With formatting no parameters tryParseDateFromString():n => ${tryParseDateFromString()}`;
<pre id="result"></pre>