I have a date in this format: dd.mm.yyyy
When I instantiate a JavaScript date with it, it gives me a NaN
In c# I can specify a date format, to s
Building on CMS answer, I created this function to deal with a variable format
function parseDate(input, format) {
format = format || 'yyyy-mm-dd'; // default format
//Change from PHP date format to JS
if (format == 'd/m/Y') {
format = 'dd/mm/yyyy';
}
if (format == 'd/m/Y H:i:s') {
format = 'dd/mm/yyyy hh:ii:ss';
}
let date = NaN;
if (format == 'dd/mm/yyyy') {
let parts = input.match(/(\d+)/g),
i = 0, fmt = {};
// extract date-part indexes from the format
format.replace(/(yyyy|dd|mm)/g, function(part) { fmt[part] = parts[i++]; });
//create date for new format
let createdDate = new Date(fmt['yyyy'], fmt['mm']-1, fmt['dd']);
//check if dates are equal by comparing parts. The issue I had here was
//when I passed an invalid value for month, the output was adjustement to
//accomodate for the extra months
if (
createdDate.getFullYear() == fmt['yyyy'] &&
createdDate.getMonth() == (fmt['mm']-1) &&
createdDate.getDate() == fmt['dd']
) {
date = createdDate;
}
}
//same but taking into account hours minute and seccond
if (format == 'dd/mm/yyyy hh:ii:ss') {
let parts = input.match(/(\d+)/g),
i = 0, fmt = {};
// extract date-part indexes from the format
format.replace(/(yyyy|dd|mm|hh|ii|ss)/g,
function(part) { fmt[part] = parts[i++]; });
let createdDate = new Date(
fmt['yyyy'], fmt['mm']-1, fmt['dd'],
fmt['hh'], fmt['ii'], fmt['ss']
);
if (
createdDate.getFullYear() == fmt['yyyy'] &&
createdDate.getMonth() == (fmt['mm']-1) &&
createdDate.getDate() == fmt['dd'] &&
createdDate.getHours() == fmt['hh'] &&
createdDate.getMinutes() == fmt['ii'] &&
createdDate.getSeconds() == fmt['ss']
) {
date = createdDate;
}
}
return date;
}