Разбор строки, содержащей дату в определенном формате, в объект Date в Javascript - PullRequest
1 голос
/ 14 декабря 2010

Я изучаю Javascript как новый язык, и я решил, что хороший способ привыкнуть к тому, как JS обрабатывает reg exp и манипуляции со строками, - это анализ строки, содержащей дату, в объект Date.

У меня есть строка в виде "2005-05-28". Каков наилучший Javascript-способ для анализа этого в объект Date?

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

Non-RegExp

Я не знаю о "лучшем", но вам не нужно регулярное выражение:

var str = "2005-05-28";
var parts = str.split("-");
var dt = new Date(parseInt(parts[0], 10),
                  parseInt(parts[1], 10) - 1,
                  parseInt(parts[2], 10));

Живой пример

Использует String#split для разбиения строки на символы -, затем конструктор Date, который принимает год, месяц (начиная с 0) и день (начиная с 1).

RegExp

Имейте в виду, что если вы действительно хотите использовать регулярное выражение, вы можете:

var str = "2005-05-28";
var parts = str.match(/^(\d{1,4})-(\d{1,2})-(\d{1,2})$/);
if (parts) {
    var dt = new Date(parseInt(parts[1], 10),
                      parseInt(parts[2], 10) - 1,
                      parseInt(parts[3], 10));
}

Живой пример

Использует регулярное выражение с группами захвата, сопоставляя его с помощью String#match, возвращая массив с полным совпадением с индексом 0, за которым следуют группы захвата.Но за мои деньги регулярное выражение на самом деле ничего вам не покупает.

За пределами

Если ваши строки дат становятся более сложными или могут варьироваться, я бы посмотрел на решение проблемы добиблиотека типа DateJS .Но если у вас такой регулярный формат, вы золотой.

0 голосов
/ 14 декабря 2010

Этот формат приемлем для стандартной даты JS. Так что вам нужно всего лишь:

var dateObject = new Date("2005-05-28");

РЕДАКТИРОВАТЬ: вышеупомянутое неправильно и TJ правильно; Я был разорен ленивым ответом. И он даже неправильно анализирует в Firefox, вычитая один из даты.

Видя, что этот вопрос оказался сложнее, чем я думал, я тщательно провел несколько тестов. IE (и другие) примет косую черту вместо черты (реализация превосходит спецификацию). Таким образом, вышесказанное будет работать с простой replace ():

var dateObject = new Date(("2005-05-28").replace("-", "/"));

Обратите внимание, что я также успешно проверил это с MM / DD / YYYY:

var dateObject = new Date("05/28/2005");

Таким образом, слэши будут анализироваться во всех основных браузерах (включая IE6).

...