Как создать новую дату() в Javascript из нестандартного формата даты
У меня есть дата в этом формате: dd.mm.yyyy
Когда я создаю экземпляр JavaScript с ним, он дает мне NaN
В С# я могу указать формат даты, чтобы сказать: здесь у вас есть моя строка, она в этом формате, пожалуйста, сделайте Datetime of it.
Возможно ли это в JavaScript? Если нет, есть ли простой способ?
Я бы предпочел не использовать подстроку для дня, подстроку для месяца и т.д., потому что мой метод также должен быть способен на немецкий, итальянский, английский и т.д..
Ответы
Ответ 1
Вам нужно будет создать функцию для извлечения деталей даты и использовать их с конструктором Date
.
Обратите внимание, что этот конструктор рассматривает месяцы как числа на основе нуля (0=Jan, 1=Feb, ..., 11=Dec
).
Например:
function parseDate(input) {
var parts = input.match(/(\d+)/g);
// note parts[1]-1
return new Date(parts[2], parts[1]-1, parts[0]);
}
parseDate('31.05.2010');
// Mon May 31 2010 00:00:00
Изменить: Для обработки формата переменной вы можете сделать что-то вроде этого:
function parseDate(input, format) {
format = format || 'yyyy-mm-dd'; // default format
var 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] = i++; });
return new Date(parts[fmt['yyyy']], parts[fmt['mm']]-1, parts[fmt['dd']]);
}
parseDate('05.31.2010', 'mm.dd.yyyy');
parseDate('31.05.2010', 'dd.mm.yyyy');
parseDate('2010-05-31');
Вышеприведенная функция принимает параметр формата, который должен содержать метки yyyy
mm
и dd
, разделители не очень важны, так как только цифры записываются в RegExp.
Вы также можете взглянуть на DateJS, небольшую библиотеку, которая делает синтаксический анализ даты безболезненным...
Ответ 2
Достаточно легко разбить строку на массив и передать части непосредственно объекту Date:
var str = "01.01.2010";
var dmy = str.split(".");
var d = new Date(dmy[2], dmy[1] - 1, dmy[0]);
Ответ 3
Нет встроенного способа манипулирования датами так, как вам хотелось бы.
jQuery-UI datepicker имеет функциональность, которую вы хотите, я уверен, что у многих других библиотек есть что-то подобное.
$.datepicker.parseDate('dd.mm.yy', '31.12.2007');
Ответ 4
t="01.01.1970"
parts = t.split(".");
for(var i = 0; i < parts.length; i++) parts[i] = parseInt(parts[i], 10);
new Date(parts[2], parts[1]-1, parts[0]);
Дата определяется как (Год, Месяц, Дата)
Параметр Date() month принимает месяц в индексе Zero. Январь = 0, февраль = 1, марш = 2... и т.д.
Разбор строки в int не нужен, но мне не нравится передавать строки в функции и просто надеется, что JavaScript "получит"... Как и некоторые люди предпочитают ===