Преобразуйте строку даты Json в объект даты JavaScript

У меня есть следующий объект JSON, который имеет поле даты в следующем формате:

{
    "AlertDate": "\/Date(1277334000000+0100)\/",
    "Progress": 1,
    "ReviewPeriod": 12 
}

Я хочу записать регулярное выражение или функцию для преобразования его в объект JavaScript так, чтобы это было в форме:

{
    "AlertDate": new Date(1277334000000),
    "Progress": 1,
    "ReviewPeriod": 12 
}

Вышеупомянутый формат даты приводит проверку к сбою в методе JQuery parseJSON.

Я хотел бы преобразовать 1277334000000+0100 в корректное количество миллисекунд для создания корректной даты, когда оценку называют после проверки.

Кто-либо может выручить меня с хорошим подходом к решению этого?

13
задан meagar 22 May 2012 в 14:32
поделиться

3 ответа

Мне нужен более глобальный ответ, чем просто изменение даты для отдельного свойства.

Мне нужно изменить все даты в строке JSON, а не только для одного свойства.

В итоге у меня получилось следующее регулярное выражение

data = data.replace(new RegExp('\\"\\\\\/Date\\((\\d{13}\\+\\d{4})\\)\\\\\/\\"', 'g'), "new Date($1)");
0
ответ дан 2 December 2019 в 02:29
поделиться

Вы действительно не должны использовать eval, если вам действительно это не нужно; Почему бы просто не иметь секунды непосредственно в JSON и не вызвать Date на этот номер, когда вам нужно отформатировать?

При необходимости можно вывести число из строки с помощью regex

0
ответ дан 2 December 2019 в 02:29
поделиться

Это то, что вы ищете?

Если это один из элементов вашего объекта: o = { "AlertDate": "/ Дата (1277334000000 + 0100) /", «Прогресс»: 1, «ReviewPeriod»: 12 }

Этот код извлечет первое число значения (игнорируя "+0100"), преобразует его в число и создаст объект даты.

var rxFirstNumber = /(\d+)/;
var strAlertDate = o.AlertDate;
var arrMatches,intTimeStamp;

arrMatches = strAlertDate.match(rxFirstNumber);
if (arrMatches !== null && arrMatches.length > 0) {
    intTimeStamp = parseInt(arrMatches[1],10);
    o.AlertDate = new Date(intTimeStamp);
}

Если вы можете быть уверены, что ваши данные всегда содержат эти строковые данные (или, по крайней мере, AlertDate всегда будет строкой, содержащей число), это можно выразить одной строкой (неприятного и неподдерживаемого) кода:

o.AlertDate = new Date(parseInt(o.AlertDate.match(/(\d+)/)[1],10));
0
ответ дан 2 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: