Как насчет этого дурацкого способа сделать это:
var date = new Date(myStr.replace(
/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/,
'$4:$5:$6 $2/$3/$1'
));
Ноль внешних библиотек, одна строка кода; -)
Объяснение оригинального метода:
// EDIT: this doesn't work! see below.
var date = Date.apply(
null,
myStr.match(/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/).slice(1)
);
Функция match()
(после slice()
d, содержащая только право) вернет массив, содержащий год, месяц, день, час, минуту и секунды. Так уж получилось, что это правильный порядок для конструктора Date. Function.apply
- это способ вызова функции с аргументами в массиве, поэтому я использовал Date.apply(<that array>)
.
например:
var foo = function(a, b, c) { };
// the following two snippets are functionally equivalent
foo('A', 'B', 'C')
var arr = ['A', 'B', 'C'];
foo.apply(null, arr);
Я только сейчас понял, что эта функция на самом деле не работает, поскольку месяцы JavaScript не имеют индекса. Вы все еще можете сделать это подобным способом, но будет промежуточный шаг, вычитая один из массива перед передачей его конструктору. Я оставил это здесь, так как об этом спрашивали в комментариях.
Другой вариант работает, как и ожидалось.