2013-09-26 4 views
0

Я пытаюсь преобразовать строковое значение в формат JavaScript Date, но я, кажется, не найти простой способ сделать это без необходимости использовать дополнительные библиотеки, такие как datejsПреобразование строки в JS Дата

var dateString = "20131120"; 
    var date  = new Date(dateString); 
console.log(date); 
    // I need to add an additional day to the original string 
    var newDate = date.getFullYear() + '-' + (date.getMonth()+1) + '-' + (date.getDate()+1); 
console.log(newDate); 

Любые подсказки очень ценятся.

+2

Ну, это не похоже на общий распознаваемый формат даты. Разделите его на части Y/M/D и передайте их отчетливо – Bergi

+0

@Bergi Благодарим вас за информацию. Я не контролирую вывод и не могу изменить его формат! – digitup

+0

Если это вариант, я бы рекомендовал использовать библиотеку, такую ​​как moment.js или date.js, а не напрямую работать с Date. – ivarni

ответ

2

До ES5 синтаксический анализ строк даты был полностью зависимым от реализации. Теперь указан a version of ISO8601, но он не поддерживается всеми используемыми браузерами. Таким образом, лучший способ - вручную разобрать его.

Так что в этом случае я хотел бы сделать:

var dateString = "20131120"; 
var m = dateString.match(/\d\d/g); 
var date = new Date(m[0] + m[1], --m[2], m[3]); 

, который будет работать в любом браузере в использовании, который поддерживает JavaScript.

+0

Это прекрасно работает. Никогда не видели такого решения раньше. – digitup

+1

Это то же самое, что и у Bhavik, но использует * match * вместо * substring * (поэтому я дал ему +1). – RobG

+0

Большое спасибо +1 за поддержку браузеров – digitup

3

Простое выражение рег:

new Date("20131120".replace(/(\d{4})(\d{2})(\d{2})/,"$2/$3/$1")) 

Это очень простое регулярное выражение.

Матч 4 номера, совпадение 2 числа, совпадение 2 числа в группах.

Работы по замене с использованием групп $ 1 - это первый матч, второй - второй, $ 3 - это третий матч. Узнайте о регулярных выражениях.

+0

Кажется, что это хорошо работает. Тестирование. Мне любопытно узнать, что происходит в этом регулярном выражении? не могли бы вы немного объяснить? – digitup

+0

добавил объяснение выше, как вы просили. – epascarello

+0

Я очень ценю это, теперь я думаю, что будет нечестно не выбирать это как ответ. Знаете ли вы о какой-либо несовместимости браузера для этого решения? – digitup

5

Можете ли вы попробовать этот код

var dateString = "20131120"; 
    var year  = dateString.substring(0,4); 
    var month  = dateString.substring(4,6); 
    var day   = dateString.substring(6,8); 
    var date  = new Date(year, month-1, day); 

Здесь используется только простой метод подстроки

First (0,4) will extract the year then next two is for month and next two is for day of month 

    NOTE: 
    Here we doing `month-1` because it will count from 0 e.g (january==0). 

надеюсь, что это помогает

+2

+1 для не использования дополнительных библиотек, n базовая функция substring для извлечения даты. – Sid

-2

Лучшее, что вы можете сделать, это использовать формат ISO: YYYY -MM-DD или YYYY-MM-DDTHH: MM: SS

Например: Дата ('2011-04-11')

или

новая Дата ('2011-04-11T11: 51: 00')

Для получения дополнительной информации: MDN | Date

Для старого Интернета Совместимость Explorer (версии IE менее 9 не поддерживают формат ISO в конструкторе даты), вы должны разделить представление строки datetime на его части, а затем вы можете использовать конструктор с использованием компонентов datetime, например: new Date ('2011', '04' - 1, '11', '11', '51', '00')

Примечание что число месяца должно быть 1 меньше.

Смежные вопросы