2016-01-03 2 views
0

У меня строка, отформатированная следующим образом: January 3 2016. Я пробовал делать new Date(Date.parse(string)), но я получаю предупреждение о недопустимых датах. Я что-то упускаю? Моя конечная цель - превратить эту дату в формат mm/dd/yyyy, который я должен был бы сделать, когда окажусь в формате Date.Создание даты из строки

Благодаря

+0

Вы не хватает чего-то, что это недопустимый дата. Действительной датой будет то, что соответствует RFC2822 или ISO 8601 – adeneo

+1

Просто используйте momentjs –

+0

С другой стороны, это действительно работает для меня, но это может быть зависимо от браузера/локали, 'Date.parse', как известно, неустойчиво, когда вы его кормите странные даты. – adeneo

ответ

1

Пример преобразования или форматирования строки даты без использования Date или библиотеки.

var monthLookup = { 
 
    january: '01', 
 
    february: '02', 
 
    march: '03', 
 
    april: '04', 
 
    may: '05', 
 
    june: '06', 
 
    july: '07', 
 
    august: '08', 
 
    september: '09', 
 
    october: '10', 
 
    november: '11', 
 
    december: '12' 
 
}; 
 

 
function customParseAndformat(dateString) { 
 
    var parts = dateString.split(' '); 
 
    parts[0] = monthLookup[parts[0].toLowerCase()]; 
 
    parts[1] = parts[1] < 10 ? '0' + parts[1] : parts[1]; 
 
    return parts.join('/'); 
 
} 
 

 
var myDateString = 'January 3 2016'; 
 
document.getElementById('out').textContent = customParseAndformat(myDateString);
<pre id="out"></pre>

Вы можете использовать подобный метод для анализа и создания объекта Date из дискретных значений, что является гораздо более надежным (кросс-среда), чем Date.parse. Пример

var monthLookup = { 
 
    january: '01', 
 
    february: '02', 
 
    march: '03', 
 
    april: '04', 
 
    may: '05', 
 
    june: '06', 
 
    july: '07', 
 
    august: '08', 
 
    september: '09', 
 
    october: '10', 
 
    november: '11', 
 
    december: '12' 
 
}; 
 

 
function parseAndCreateDate(dateString) { 
 
    var parts = dateString.split(' '); 
 
    parts[0] = monthLookup[parts[0].toLowerCase()] - 1; 
 
    parts[1] = parts[1] < 10 ? '0' + parts[1] : parts[1]; 
 
    return new Date(parts[2], parts[0], parts[1]); 
 
} 
 

 
var myDateString = 'January 3 2016'; 
 
document.getElementById('out').textContent = parseAndCreateDate(myDateString).toDateString();
<pre id="out"></pre>

Теперь вы можете форматировать, как вы хотите от возвращенного объекта Date, используя свои методы.

Where can I find documentation on formatting a date in JavaScript?

1

Для меня это работает: Date(Date.parse('January 3 2016'))

0

Разбор даты в Javascript, скажем, сложно. Это зависит от браузера и зависит от культуры, и это сложная задача.

Если вы настроили таргетинг на несколько браузеров и несколько стран, я бы рекомендовал вам использовать moment.js.

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