Преобразование строки в формате YYYYMMDDHHMMSS в объект JavaScript Date - PullRequest
3 голосов
/ 02 декабря 2009

У меня есть строка с датой в ней, отформатированная примерно так: ГГГГММДДЧЧММСС. Мне было интересно, как я мог бы преобразовать его в объект JavaScript Date с помощью JavaScript.

Заранее спасибо!

Ответы [ 6 ]

8 голосов
/ 02 декабря 2009

Как насчет этого дурацкого способа сделать это:

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 не имеют индекса. Вы все еще можете сделать это подобным способом, но будет промежуточный шаг, вычитая один из массива перед передачей его конструктору. Я оставил это здесь, так как об этом спрашивали в комментариях.

Другой вариант работает, как и ожидалось.

4 голосов
/ 02 декабря 2009

Примитивная версия:

new Date(foo.slice(0, 4), foo.slice(4, 6) - 1, foo.slice(6, 8),
    foo.slice(8, 10), foo.slice(10, 12), foo.slice(12, 14))

Явное преобразование строк в числа не требуется: функция Date() сделает это за вас.

3 голосов
/ 02 декабря 2009

Я считаю DateJS лучшей библиотекой для всего, что связано с преобразованием, анализом и использованием дат в JavaScript. Если вам нужны такие преобразования чаще, вам стоит подумать об их использовании в вашем приложении:

Date.parseExact("20091202051200", "YYYYMMDDHHMMSS");
1 голос
/ 02 декабря 2009

Если вы можете использовать jQuery, jQuery.ui.datepicker имеет утилиту , функцию .

0 голосов
/ 02 декабря 2009

В вашей строке нет информации о часовом поясе. Скорее всего, это GMT, так что это следует учитывать когда вы делаете дату. Вы можете легко сделать преобразование с помощью простых методов javascript.

Date.Brit= (function(){
    return Date.parse('2/6/2009')> Date.parse('6/2/2009');
})()


var s= "20091202093000"
var D= s.match(/(\d{2})/g);
if(Date.Brit){
    D.splice(2, 2, D[3],D[2]);
}
var day= new Date(Date.parse(D[2]+'/'+D[3]+'/'+
D[0]+D[1]+' '+D.splice(4).join(':')+' GMT'));

day.toUTCString()+'\n'+day


/*  returned value: (String)
Wed, 02 Dec 2009 09:30:00 GMT
Wed Dec 02 2009 04:30:00 GMT-0500 (Eastern Standard Time)
*/
0 голосов
/ 02 декабря 2009

Функции даты из этой библиотеки могут помочь: http://javascripttoolbox.com/lib/date/, это бесплатно и очень просто в использовании.

Если вы хотите сделать это самостоятельно, я бы посоветовал поискать регулярные выражения javascript, так как я думаю, что это способ достижения этого лучшего

...