В принятом ответе есть ошибка
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
Подумайте, содержит ли указатель даты "77-78-7980", что, очевидно, является недопустимой датой.Это приведет к:
var f = new Date(7980, 77, 77);
=> Date 7986-08-15T22:00:00.000Z
Что, вероятно, не является желаемым результатом.
Причина этого объясняется на сайте MDN :
Где Date вызывается как конструктор с более чем одним аргументом, если значения больше чемих логический диапазон (например, 13 указывается как значение месяца или 70 для значения минут), соседнее значение будет скорректировано.Например, new Date(2013, 13, 1)
эквивалентно new Date(2014, 1, 1)
.
Лучший способ решения проблемы:
const stringToDate = function(dateString) {
const [dd, mm, yyyy] = dateString.split("-");
return new Date(`${yyyy}-${mm}-${dd}`);
};
console.log(stringToDate('04-04-2019'));
// Date 2019-04-04T00:00:00.000Z
console.log(stringToDate('77-78-7980'));
// Invalid Date
Это дает вам возможность обрабатывать неверный ввод.
Например:
const date = stringToDate("77-78-7980");
if (date === "Invalid Date" || isNaN(date)) {
console.log("It's all gone bad");
} else {
// Do something with your valid date here
}