Вы передаете объект Date в Date.parse () , для которого требуется строка.
Ваш код:
birthday = new Date(formYear + '-' + formMonth + '-' + formDay);
birthday = Date.parse(birthday); // NaN
Измените последнюю строку на :
birthday = Date.parse(birthday.toString());
Обновление:
ОП отмечает, что проблема была в нестандартной строке даты, введенной в new Date()
, а не в вызове Date.parse()
.
Ввод строки даты был исправлен, но вызов Date.parse()
по-прежнему неверен (хотя некоторые браузеры могут по-прежнему работать с ним).
// this is correct
birthday = new Date(2001, 2, 4);
console.log(typeof birthday); // object
// this is NOT correct, argument to Date.parse is type 'object'
// (Date.parse argument must be type 'string')
birthday = Date.parse(birthday);
// this is what you want:
let birthTime = birthday.getTime();
Date.parse требует строковый аргумент, начиная с MDN :
dateString
Строка, представляющая собой упрощение расширенного формата календарной даты ISO 8601. (Могут использоваться и другие форматы, но результаты зависят от реализации.)
Даже с допустимой строкой даты для передачи в Date.parse, вам следует избегать использования Date.parse полностью, так как различные хосты анализируют дата строки по-разному. От MDN:
Не рекомендуется использовать Date.parse
, поскольку до ES5 разбор строк полностью зависел от реализации. По-прежнему существует много различий в том, как разные хосты анализируют строки даты, поэтому строки даты следует анализировать вручную (библиотека может помочь, если нужно разместить много разных форматов).