я пытаюсь преобразовать строку в формате dd-mm-yyy в объект даты в JavaScript, используя следующее:
var from = $("#datepicker").val();
var to = $("#datepickertwo").val();
var f = new Date(from);
var t = new Date(to);
("#datepicker").val()
содержит дату в формате dd-mm-yyy.
Когда я делаю следующее, я получаю "Неверную дату":
alert(f);
Это происходит из-за символа '-'? Как я могу это преодолеть?
Разделение на "-то"
Разобрать строку на части нужно:
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
Использование регулярных выражений
var date = new Date("15-05-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))
Почему бы не использовать regex?
Потому что вы знаете, вы'll быть рабочей на строку, состоящую из трех частей, разделенных дефисом.
Однако, если вы ищете что одной строки внутри другой строки, регулярные выражения бы быть способом пойти.
Повторное использование
Потому что вы'повторно делать это не раз в вашем примере кода, а может и в другом месте в коде, обернуть его в функцию:
function toDate(dateStr) {
var parts = dateStr.split("-")
return new Date(parts[2], parts[1] - 1, parts[0])
}
Используя в качестве:
var from = $("#datepicker").val()
var to = $("#datepickertwo").val()
var f = toDate(from)
var t = toDate(to)
Или если вы Don'т ум jQuery в вашу функцию:
function toDate(selector) {
var from = $(selector).val().split("-")
return new Date(from[2], from[1] - 1, from[0])
}
Используя в качестве:
var f = toDate("#datepicker")
var t = toDate("#datepickertwo")
Современный JavaScript
Если вы'вновь в состоянии использовать более современные и JS, массив деконструкция является приятной чертой также:
const toDate = (dateStr) => {
const [day, month, year] = dateStr.split("-")
return new Date(year, month - 1, day)
}
обычный пример выражения:
new Date( "13-01-2011".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );
Еще одна возможность:
var from = "10-11-2011";
var numbers = from.match(/\d+/g);
var date = new Date(numbers[2], numbers[0]-1, numbers[1]);
Соответствие цифр и порядок их
var from = $("#datepicker").val();
var f = $.datepicker.parseDate("d-m-Y", from);
Используйте этот формат: myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00
.
Вы также можете записать дату внутри круглых скобок объекта Date()
, например, так:
new Date("Month dd, yyyy hh:mm:ss")
new Date("Month dd, yyyy")
new Date(yyyy,mm,dd,hh,mm,ss)
new Date(yyyy,mm,dd)
new Date(milliseconds)
В моем случае
new Date("20151102034013".replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3T$4:$5:$6"))
Результат работы: Пн Ноя 02 2015 04:40:13 по GMT+0100 (CET)в затем я использую .gettime() так, чтобы работать с миллисекундами
Вы можете использовать внешнюю библиотеку, чтобы помочь себе.
http://www.mattkruse.com/javascript/date/source.html
getDateFromFormat(val,format);
Смотрите также: https://stackoverflow.com/questions/1576753/parse-date-string-in-javascript
Принято отвечать вроде есть ошибка
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
Если рассмотреть элемент datepicker содержит "77-78-7980" и что, очевидно, не является допустимой датой. Это приведет к:
var f = new Date(7980, 77, 77);
=> Date 7986-08-15T22:00:00.000Z
Что, вероятно, не желаемого результата.
Причина этого объясняется в МДН сайт:
где дата называется в качестве конструктора с более чем одним аргументом, если значений больше, чем их логический ряд (например, 13 в как месяц значения или 70 в минуту), то соседние значения. Е. Г. новая дата(2013, 13, 1)
эквивалентно
новая дата(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
}
Вы могли бы использовать регулярное выражение.
var result = /^(\d{2})-(\d{2})-(\d{4})$/.exec($("#datepicker").val());
if (result) {
from = new Date(
parseInt(result[3], 10),
parseInt(result[2], 10) - 1,
parseInt(result[1], 10)
);
}
new Date().toLocaleDateString();
просто, просто передать ваши даты в JS объект Date